κ΅μλκ»μ μμ μ΄ λ©΄μ κ΄μ΄λ©΄ λ¬Όμ΄λ³Όλ§ν κ²μΌλ‘ μλμ κ²λ€μ λ§μνμ μ,
μ 리ν΄λ³΄κ³ μ νλ€~!
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°
: Object-oriented programming (OOP, κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°)
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ 4κ°μ§ νΉμ§μ μΊ‘μν, μμ, μΆμν, λ€νμ±μ΄λ€.
μΊ‘μν
κ°μ²΄μ μν (λ°μ΄ν°)λ₯Ό μΈλΆμμ μ§μ μ κ·Όνμ§ λͺ»νκ³ ,
λ©μλλ₯Ό ν΅ν΄μλ§ μ κ·Όνλλ‘ λ³΄νΈνλ κ°λ
λ°μ΄ν° (μμ±)μ κ·Έ λ°μ΄ν°λ₯Ό μ‘°μνλ λ©μλ (νλ)μ νλμ λ¨μ (ν΄λμ€)λ‘ λ¬Άκ³ ,
μΈλΆμμ μ§μ μ κ·Όνμ§ λͺ»νλλ‘ μ¨κΈ°λ κ²
- λͺ©μ
- λ°μ΄ν° 보νΈ, λ¬΄κ²°μ± μ μ§
- λ³κ²½μ΄ νμν κ²½μ° λ©μλ μμ€μμλ§ μμ κ°λ₯ (μ μ§ λ³΄μκ° μ©μ΄ν΄μ§)
- μ¬μ©
- νλλ private, protected λ±μ μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ¨κΉ
- μ κ·Όμ μν κ²½μ° getter λ° setter λ©μλλ₯Ό ν΅ν΄ μ κ·Όμ μ μ΄
class Employee {
private String name; // μΈλΆμμ μ§μ μ κ·Ό λΆκ°
private double salary;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public double calculateTax() {
return this.salary * 0.1; // λ΄λΆ λ‘μ§λ§ λ
ΈμΆ
}
}
nameκ³Ό salaryλ privateλ‘ μ€μ λμ΄ μμ΄, μΈλΆμμ μ§μ μ κ·Όνμ§ λͺ»ν¨. (= μΊ‘μν)
νμ§λ§ λ©μλλ₯Ό ν΅ν΄μ κ°μ μ μΌλ‘ μ κ·Όμ΄ κ°λ₯ν¨
μμ
κΈ°μ‘΄ ν΄λμ€ (λΆλͺ¨ ν΄λμ€)μ μμ±κ³Ό λ©μλλ₯Ό
μλ‘μ΄ ν΄λμ€ (μμ ν΄λμ€)κ° λ¬Όλ €λ°μ μ¬μ¬μ©νκ±°λ νμ₯ν μ μλ κΈ°λ₯
- λͺ©μ
- μ½λ μ¬μ¬μ©μ± μ¦κ° λ° μ μ§λ³΄μμ±μ λμΌ μ μμ
- κ³΅ν΅ κΈ°λ₯μ λΆλͺ¨ ν΄λμ€μ μ μνμ¬ μ€λ³΅ μ κ±°
- μ¬μ©
- extends ν€μλλ₯Ό ν΅ν΄ μμ ꡬν
// λΆλͺ¨ ν΄λμ€
public class Car {
public void startEngine() {
System.out.println("Engine started");
}
}
// μμ ν΄λμ€
public class SportsCar extends Car {
public void turboBoost() {
System.out.println("Turbo boost activated");
}
}
SportsCar myCar = new SportsCar();
myCar.startEngine(); // λΆλͺ¨ ν΄λμ€ λ©μλ μ¬μ©
myCar.turboBoost(); // μμ ν΄λμ€ κ³ μ λ©μλ μ¬μ©
SportsCarλ Carν΄λμ€λ₯Ό μμ λ°μ λΆλͺ¨μ κΈ°λ₯μ μ¬μ¬μ©ν μ μμ.
μΆμν
λΆνμν μΈλΆ μ¬νμ μ¨κΈ°κ³ , νμν κΈ°λ₯λ§μ λ ΈμΆνλ κ°λ
κ°μ²΄μ μ€μν μμ±κ³Ό λμλ§μ λͺ¨λΈλ§νμ¬ λΆνμν μΈλΆμ¬νμ μ¨κΉ
μ΄λ₯Ό ν΅ν΄ μ¬μ©μλ 볡μ‘ν λ΄λΆ ꡬνμ μ νμ μμ΄, νμν κΈ°λ₯λ§ μ¬μ©ν μ μμ
- λͺ©μ
- 볡μ‘μ±μ μ€μ΄κ³ κ°λ¨ν μ€κ³λ₯Ό μ 곡ν μ μμ
- κ°μ²΄ κ°μ μνΈμμ©μ λ¨μν
- μ μ°ν μ€κ³ : λ΄λΆ ꡬνμ΄ λ³κ²½λλλΌλ μΈλΆ μΈν°νμ΄μ€λ κ·Έλλ μ μ§λμ΄ μ μ§λ³΄μκ° μ©μ΄ν΄μ§
- μ¬μ© : νλ‘κ·Έλλ°μμμ μΆμν
- μΆμ ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ ꡬν
1οΈβ£ μΆμ ν΄λμ€
: κ·Έλ₯ ν΄λμ€μ μΌμ’ μΌλ‘, ꡬνλ λ©μλμ ꡬνλμ§ μμ λ©μλλ₯Ό λ λ€ ν¬ν¨ν μ μμ.
- λͺ©μ
- 곡ν΅λ κΈ°λ₯ (μ½λ)μ μΌλΆ μ 곡νλ©΄μ νμ₯ν λ μ¬μ©
- νΉμ§
- μμ λ°λ ν΄λμ€κ° μΆμ λ©μλλ₯Ό ꡬννλλ‘ κ°μ ν μ μμ
- μΌλ° λ©μλ(ꡬνλ λ©μλ)μ μΆμ λ©μλ(ꡬνλμ§ μμ λ©μλ)λ₯Ό λͺ¨λ κ°μ§ μ μμ
- λ©€λ² λ³μ(νλ)μ μμ±μλ₯Ό κ°μ§ μ μμ
- λ¨μΌ μμλ§ κ°λ₯ (λ€μ€ μμ λΆκ°)
λ¨μΌ μμλ§ κ°λ₯νλ€λ μλ―Έ?
= νλμ ν΄λμ€κ° μ€μ§ νλμ λΆλͺ¨ ν΄λμ€λ§ μμλ°μ μ μλ€λ μλ―Έ
λ€μ€μΌλ‘ μμ λ°κ³ μΆμΌλ©΄, interfaceλ₯Ό νμ©ν΄μΌ ν¨.
ex) class Dog implements Animal, Pet {~
abstract class Animal {
String name;
abstract void makeSound(); // μΆμ λ©μλ
void eat() { // μΌλ° λ©μλ
System.out.println(name + " is eating.");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
2οΈβ£ μΈν°νμ΄μ€
: ν΄λμ€κ° ꡬνν΄μΌ ν λμμ μ μνλ μΌμ’ μ λͺ μΈμ!!!!
1λ²μμ μΌλ° λ©μλμ μΆμ λ©μλλ₯Ό λͺ¨λ κ°μ§ μ μλ κ²κ³Ό λ¬λ¦¬ μΈν°νμ΄μ€μ λͺ¨λ λ©μλλ κΈ°λ³Έμ μΌλ‘ ꡬνλμ§ μμ μνλ‘ μ 곡νλ€
- λͺ©μ
- νΉμ λμμ μ¬λ¬ ν΄λμ€μμ λμΌνκ² κ΅¬ννλλ‘ κ°μ
- νΉμ§
- μΆμ ν΄λμ€λ `μμ`μ΄λΌλ κ°λ μ΄μ§λ§, μΈν°νμ΄μ€λ `ꡬν`μ΄λΌλ κ°λ
- μλ° 8 μ΄νμλ `default` ν€μλλ₯Ό ν΅ν΄ μΌλΆ ꡬνλ λ©μλλ₯Ό ν¬ν¨ν μ μμ
- λ©€λ² λ³μλ public static final ννλ‘λ§ μ μΈν μ μμ
- λ€μ€ ꡬν κ°λ₯
public static finalμ΄λ?
μΈν°νμ΄μ€μμ μ£Όλ‘ μ¬μ©νλ λ°©μμΌλ‘, λͺ¨λ κ°μ²΄κ° 곡μ νλ λ³κ²½ λΆκ°λ₯ν μμλ₯Ό μ μ
interface Animal {
void makeSound(); // μΆμ λ©μλ
}
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Bark");
}
}
class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow");
}
}
κ·ΈλΌ μΆμ ν΄λμ€μ μΈν°νμ΄μ€μ μ°¨μ΄?
- μΆμ ν΄λμ€λ κ³΅ν΅ μμ±κ³Ό κΈ°λ₯μ κ°μ§ ν΄λμ€λ₯Ό μν κΈ°λ³Έ νλ‘ μ¬μ©λλ©°, νμ₯κ³Ό μ¬μ¬μ©μ±μ΄ λͺ©μ
- μΈν°νμ΄μ€λ νΉμ λμμ μ¬λ¬ ν΄λμ€μμ λμΌνκ² κ΅¬ννλλ‘ κ°μ !! νκΈ° μν΄ μ¬μ©λλ©°, λ€νμ±μ κ·ΉλννκΈ° μν΄ μ¬μ©
| μΆμ ν΄λμ€ | μΈν°νμ΄μ€ | |
| λͺ©μ | μμμ ν΅ν΄ κ³΅ν΅ κΈ°λ₯ μ 곡, κ³΅ν΅ κΈ°λ₯μ μμ λ°μ νμ₯ |
ν΄λμ€ κ° κ·μ½ μ μ, λμΌν λμμ μ¬λ¬ ν΄λμ€μμ ꡬννλλ‘ κ°μ |
| μμ ν€μλ | extends | interface |
| λ©μλ μ ν | μΌλ° λ©μλμ μΆμ λ©μλ λͺ¨λ ν¬ν¨ κ°λ₯ | κΈ°λ³Έμ μΌλ‘ λͺ¨λ λ©μλ (default μ μΈ) |
| λ©€λ² λ³μ | μΌλ° νλ ν¬ν¨ κ°λ₯ | public static final ννλ§ κ°λ₯ |
λ€νμ±
λμΌν μ΄λ¦μ κ°μ§ λ κ° μ΄μμ λ©μλκ° μ¬λ¬ ννλ‘ λμν μ μλ κ°λ
μ΄λ¦μ κ°μ§λ§, μνλλ νμκ° λ€λ₯Ό μ μμ
- λͺ©μ
- λ€μν κ°μ²΄λ₯Ό μΌκ΄λ λ°©μμΌλ‘ μ²λ¦¬ν μ μμ
* λ©μλ μ€λ²λ‘λ© (Method Overloading)
: κ°μ μ΄λ¦μ λ©μλλ₯Ό λ§€κ°λ³μ νμ μ΄λ κ°μμ λ°λΌ λ€λ₯΄κ² μ μ
class Calculator {
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
}
* λ©μλ μ€λ²λΌμ΄λ© (Method Overriding)
: λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μ
class Animal {
void makeSound() {
System.out.println("Animal sound");
}
}
class Cat extends Animal {
@Override // λ©μλ μ€λ²λΌμ΄λ
void makeSound() {
System.out.println("Meow");
}
}
Animal cat = new Cat();
cat.makeSound(); // Meow μΆλ ₯