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 권고는 "상속을 적극 활용하라"이다.