πΎ [CS] κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμμ κ°μ²΄(Object)λ 무μμΌκΉμ?
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP)μμμ κ°μ²΄(Object)λ ν΄λμ€(Class)μ μν΄ μ μλ λ°μ΄ν°μ κ·Έ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ λμ(λ©μλ, Method)μ ν¬ν¨νλ λ 립μ μΈ κ°μ²΄μ λλ€.
- κ°μ²΄(Object)λ νλ‘κ·Έλ¨ λ΄μμ μν(μμ± λλ νλ)μ νμ(λ©μλ λλ ν¨μ)λ₯Ό κ°μ§λ©°, μ΄λ¬ν μνμ νμλ₯Ό ν΅ν΄ νμ€ μΈκ³μ μ¬λ¬Όμ λͺ¨λΈλ§νκ±°λ μμ€ν λ΄μ κ°λ μ μΆμννλ λ°©μμΌλ‘ μ¬μ©λ©λλ€.
πββοΈ μΆμν(Abstraction)
πββοΈ DIPμ μ μμμ λ§νλ βμΆμνλ κ²βμ΄λ 무μμΌκΉ?
πββοΈ DIPμ μ μμμ λ§νλ βμΆμνλ κ²βκ³Ό βμΆμνβμ κ°λ μ μ°¨μ΄μ .
1οΈβ£ κ°μ²΄μ κ΅¬μ± μμ.
1οΈβ£ μμ±(Attributes) λλ νλ(Fields)
- κ°μ²΄μ λ°μ΄ν°λ₯Ό λνλ
λλ€.
- μ΄λ κ°μ²΄κ° κ°μ§λ μνλ₯Ό νννλ λ³μλ‘, ν΄λμ€μμ μ μλ μμ±(Attributes)μ λ°λΌ κ° κ°μ²΄λ κ³ μ ν κ°μ
- μλ₯Ό λ€μ΄, βμλμ°¨β κ°μ²΄μλ μμ, μλ κ°μ μμ±μ΄ μμ μ μμ΅λλ€.
- Javaμμ μμ±μ μΈμ€ν΄μ€ λ³μλ‘ ννλ©λλ€.
class Car {
private String color;
private int speed;
public Car(String color, int speed) {
this.color = color; // μμ±
this.speed = this.speed; // μμ±
}
}
2οΈβ£ λ©μλ(Methods)
- κ°μ²΄μ νλμ μ μνλ ν¨μμ
λλ€.
- λ©μλλ κ°μ²΄μ λ°μ΄ν°λ₯Ό μ‘°μνκ±°λ νΉμ μμ μ μνν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, βμλμ°¨β κ°μ²΄(Object)λ λ¬λ¦¬κΈ° λλ λ©μΆκΈ° κ°μ λ©μλ(Methods)λ₯Ό κ°μ§ μ μμ΅λλ€.
- Javaμμ λ©μλ(Methods)λ ν¨μλ‘ μ μλ©λλ€.
class Car {
private String color;
private int speed;
public Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
public void run() {
System.out.println("The car is running at " + this.speed + " km/h"); // λ©μλ(Methods)
}
}
3οΈβ£ ν΄λμ€(Class)
-
κ°μ²΄(Object)λ₯Ό μμ±νκΈ° μν μ²μ¬μ§ λλ μ€κ³λμ
λλ€.
- ν΄λμ€λ κ°μ²΄μ μμ±(Attributes)κ³Ό λ©μλ(Methods)λ₯Ό μ μνλ©°, κ°μ²΄(Object)λ μ΄ ν΄λμ€(Class)λ₯Ό κΈ°λ°μΌλ‘ μμ±λ©λλ€.
- μλ₯Ό λ€μ΄, βCarβλΌλ ν΄λμ€(Class)λ μλμ°¨μ μμ±(μμ, μλ)κ³Ό νλ(λ¬λ¦¬κΈ°, λ©μΆκΈ°)μ μ μνκ³ , μ΄ ν΄λμ€(Class)λ₯Ό μ¬μ©ν΄ λ€μν βμλμ°¨β κ°μ²΄(Object)λ₯Ό λ§λ€ μ μμ΅λλ€.
- Javaμμ ν΄λμ€λ λ€μκ³Ό κ°μ΄ μ μλ©λλ€.
class Car {
private String color;
private int speed;
public Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
public void run() {
System.out.println("The car is running at " + this.speed + " km/h");
}
}
4οΈβ£ μΈμ€ν΄μ€(Instance)
-
ν΄λμ€(Class)λ‘λΆν° μμ±λ μ€μ κ°μ²΄(Object)λ₯Ό μλ―Έν©λλ€.
- νλμ ν΄λμ€(Class)λ μ¬λ¬ κ°μ μΈμ€ν΄μ€(Instance)λ₯Ό κ°μ§ μ μμΌλ©°, κ° μΈμ€ν΄μ€λ κ³ μ ν μμ±(Attributes) κ°μ κ°μ§ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄,βCarβ ν΄λμ€μμ βred_carβλΌλ μΈμ€ν΄μ€(Instance)λ₯Ό μμ±ν μ μμ΅λλ€.
Car redCar = new Car("red", 120);
redCar.run(); // "The car is running at 120 km/h" μΆλ ₯
2οΈβ£ κ°μ²΄μ νΉμ±.
1οΈβ£ μΊ‘μν(Encapsulation)
- κ°μ²΄(Object)λ μμ μ λ°μ΄ν°λ₯Ό μΈλΆλ‘λΆν° μλνκ³ , ν΄λΉ λ°μ΄ν°λ₯Ό μ‘°μνλ λ©μλ(Methods)λ₯Ό ν΅ν΄μλ§ μ κ·Όμ νμ©νλ νΉμ±μ κ°μ§λλ€.
- μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°μ 무결μ±μ μ μ§ν μ μμ΅λλ€.
- μΊ‘μν(Encapsulation)λ κ°μ²΄(Object) λ΄λΆ ꡬν μΈλΆ μ¬νμ μΈλΆμμ μ νμ μμ΄ μΈν°νμ΄μ€(Interface)λ§μ ν΅ν΄ μνΈμμ©ν μ μλλ‘ ν©λλ€.
2οΈβ£ μΆμν(Abstraction)
- κ°μ²΄(Object)λ νμ€ μΈκ³μ μ¬λ¬Όμ΄λ κ°λ
μ μΆμννμ¬ λνλ
λλ€.
- 볡μ‘ν μμ€ν μ λ¨μννμ¬ μ€μν μ 보λ§μ νννκ³ , λΆνμν μΈλΆ μ¬νμ μ¨κΉλλ€.
- μλ₯Ό λ€μ΄, μλμ°¨μ 볡μ‘ν μμ§ λ΄λΆ ꡬ쑰λ μ¨κΈ°κ³ , μ¬μ©μλ λ¨μν βλ¬λ¦¬κΈ°β λ©μλ(Methods)λ‘ μλμ°¨λ₯Ό μμ§μΌ μ μμ΅λλ€.
3οΈβ£ μμ(Inheritance)
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ μμ(Inheritance)μ ν ν΄λμ€κ° λ€λ₯Έ ν΄λμ€μ μμ±(Attributes)κ³Ό λ©μλ(Methods)λ₯Ό λ¬Όλ €λ°λ κ²μ μλ―Έν©λλ€.
- μ΄λ₯Ό ν΅ν΄ κΈ°μ‘΄ ν΄λμ€μ κΈ°λ₯μ νμ₯νκ±°λ μμ νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μ μν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, βCarβ ν΄λμ€λ βElectricCarβλΌλ νμ ν΄λμ€λ‘ νμ₯λ μ μμ΅λλ€.
class ElectricCar extends Car { private int batteryCapacity; public ElectricCar(String color, int speed, int batteryCapacity) { super(color, speed); this.batteryCapacity = batteryCapacity; } }
4οΈβ£ λ€νμ±(Polymorphism)
-
λ€νμ±(Polymorphism)μ κ°μ²΄(Object)κ° κ°μ μΈν°νμ΄μ€(Interface)λ₯Ό μ¬μ©νμ¬ λ€μν λ°©μμΌλ‘ λμν μ μλ νΉμ±μ
λλ€.
- μ¦, λμΌν λ©μλ(Methods)κ° λ€μν ν΄λμ€μμ λ€λ₯΄κ² ꡬνλ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, βAnimalβμ΄λΌλ ν΄λμ€μ βspeak()βλΌλ λ©μλκ° μλ€λ©΄, μ΄λ₯Ό μμλ°λ βDogβμ βCatβ ν΄λμ€λ κ°κ°μ λ°©μμΌλ‘ μ΄ λ©μλλ₯Ό λ€λ₯΄κ² ꡬνν μ μμ΅λλ€.
class Animal {
public void speak() {
// λ©μλ ꡬν μλ΅
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("Woof");
}
}
class Cat extends Animal {
@Override
public void speak() {
System.out.println("Meow");
}
}
3οΈβ£ κ°μ²΄μ μμ.
1οΈβ£ μλμ°¨ κ°μ²΄ μμ.
class Car {
private String color;
private int speed;
public Car(String color, int speed) {
this.color = color;
this.speed = speed;
}
public void run() {
System.out.println("The " + this.color + " car is running at " + this.speed + " km/h");
}
public class Main {
public static void main(String[] args) {
// μΈμ€ν΄μ€ μμ±
Car myCar = new Car("red", 100);
myCar.run(); // "The red car is running at 100 km/h" μΆλ ₯
}
}
}
2οΈβ£ μν κ³μ’ κ°μ²΄ μμ.
class BankAccount {
private String accountNumber;
private double balance;
public BankAccount(String accountNumber, double balance) {
this.accountNumber = accountNumber;
this.balance = balance;
}
public void deposit(double amount) {
balance += amount;
System.out.println(amount + " deposited. Ned balance: " + balance);
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
System.out.println(amount + " withdrawn. Remaining balance: " + balance);
} else {
System.out.println("Insufficient balance");
}
}
}
public class Main {
public static void main(String[] args) {
// μΈμ€ν΄μ€ μμ±.
BankAccount myAccount = new BankAccount("123-456", 5000);
myAccount.deposit(1000); // "1000 deposited. New balance: 6000" μΆλ ₯
myAccount.withdraw(2000); // "2000 withdraw Remaining balance: 4000" μΆλ ₯
}
}
4οΈβ£ κ²°λ‘ .
- κ°μ²΄(Object)λ ν΄λμ€(Class)μ μ μλ μμ±(Attributes)κ³Ό λ©μλ(Methods)λ₯Ό κ°μ§ λ 립μ μΈ κ°μ²΄λ‘, κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ΅¬μ± μμμ λλ€.
- κ°μ²΄(Object)λ νμ€ μΈκ³μ κ°λ μ΄λ μμ€ν μ κ΅¬μ± μμλ₯Ό νλ‘κ·Έλλ°μ μΌλ‘ νννλ©°, μν(μμ±)μ νμ(λ©μλ)λ₯Ό κ°μ§κ³ μμ΅λλ€.
- κ°μ²΄λ μΆμν, μΊ‘μν, μμ, λ€νμ±κ³Ό κ°μ κ°μ²΄ μ§ν₯ μμΉμ λ°λ₯΄λ©°, μ¬μ¬μ© κ°λ₯μ±κ³Ό μ μ§λ³΄μμ±μ ν₯μ μν΅λλ€.