topic★★★★★난이도 · 약 20분
객체지향 4대 원칙 — 캡슐화·상속·다형성·추상화
OOP의 4기둥 + 현대적 비판(상속보다 합성) — 클래스를 언제 써야 하는지 감각.
#OOP#캡슐화#상속#다형성#합성
왜 배우는가
Java·C# 시대에 만들어진 '상속 만능주의'가 현대에 와서는 조심해야 할 패턴. 4원칙을 알되 '합성 > 상속' 원칙도 같이 익힌다.
객체(Object)는 데이터(상태) + 그 데이터를 조작하는 함수(메서드)를 한 덩어리로 묶은 것. 클래스는 그 틀(template).
| 원칙 | 뜻 | 예시 |
|---|---|---|
| 캡슐화 | 데이터는 숨기고 공식 창구로만 접근 | `private` 필드, getter/setter |
| 상속 | 공통 기능을 부모가 제공 | `class Dog extends Animal` |
| 다형성 | 같은 호출이 객체별로 다르게 동작 | `animal.speak()` → 개·고양이 각자 |
| 추상화 | 본질만 드러내고 구현 숨김 | interface, abstract class |
typescript
// ━━━ 캡슐화 ━━━
class BankAccount {
private balance: number = 0; // 외부에서 직접 수정 불가
deposit(amount: number) { // 공식 창구
if (amount <= 0) throw new Error();
this.balance += amount;
}
getBalance() { return this.balance; }
}
// ━━━ 상속 + 다형성 ━━━
abstract class Animal {
abstract speak(): string; // 추상 메서드
}
class Dog extends Animal {
speak() { return "멍멍"; }
}
class Cat extends Animal {
speak() { return "야옹"; }
}
const zoo: Animal[] = [new Dog(), new Cat()];
zoo.forEach(a => console.log(a.speak())); // 다형성
// ━━━ 인터페이스 (추상화) ━━━
interface Payer {
pay(amount: number): Promise<void>;
}
class TossPayer implements Payer {
async pay(amount: number) { /* 토스 API */ }
}
class StripePayer implements Payer {
async pay(amount: number) { /* 스트라이프 API */ }
}
// 호출부는 Payer 인터페이스만 알면 됨 → 교체 가능인터페이스가 OOP의 진짜 힘. 구현체를 갈아끼우기 쉬움(의존성 주입).
현대적 권고 — "상속보다 합성(Composition over Inheritance)". 깊은 상속 트리는 변경에 약하다. 같은 기능이 필요하면 상속 대신 객체를 품어서(has-a) 조합한다.
typescript
// ❌ 깊은 상속 — 확장에 경직
class Animal { }
class Pet extends Animal { }
class Dog extends Pet { }
class Poodle extends Dog { } // 새 종 나올 때마다 계층 폭발
// ✅ 합성 — 기능 단위로 조립
type Barker = { bark: () => void };
type Swimmer = { swim: () => void };
type Fetcher = { fetch: () => void };
function createDog(): Barker & Fetcher {
return {
bark: () => console.log("멍"),
fetch: () => console.log("물어옴"),
};
}
// 개가 수영도 하면 Swimmer만 추가 합성React에서 Class Component → Function Component로 간 것도 이 맥락. 상속 계층 → 훅(hook) 합성으로.
실기 드릴 2문항
edit실기 드릴 · 단답형
OOP의 4대 원칙을 모두 쓰시오.
check_circle실기 드릴 · OX
현대 OOP 권고는 "상속을 적극 활용하라"이다.