Book/DEV

오브젝트 (4)

코드파고 2025. 4. 16. 20:11

이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다

이전 포스팅

오브젝트 (1)
오브젝트 (2)
오브젝트 (3)

상속과 코드 재사용

상속

  • 기존 클래스를 확장해 새로운 클래스를 만듬
  • is-a 관계
  • 기존 클래스의 기능을 물려받는다.
  • 부모와의 결합도 ⬆️
    • 자식이 부모에 대해 아주 잘! 알아야함

언제 상속을 사용할까?

  • 상속 관계가 is-a 관계인가?
  • 부모 클래스 타입으로 자식 클래스를 사용해도 무방한가? (행동호환성)

합성

  • 클래스 인스턴스 안에 기존의 인스턴스를 추가
  • has-a 관계
  • 합성 객체들의 인터페이스를 명확하게 정의해야 함

믹스인

객체 생성시 코드 일부를 클래스 내에 섞어 넣는다(컴파일 시점 주입)

스칼라의 트레이트가 이를 활용


다형성

런타임 시점에 결합되는 동적인 문맥을 사용한다.

self

런타임 시점에 자기 자신 / 혹은 자식 인스턴스를 가르킨다.
현재 객체의 동적 타입을 기준으로 호출 대상을 찾는다

추상화된 계층에서 self를 호출할 시 어떤 클래스의 함수인지 탐색한다. 이 때문에 디버깅 난이도가 상승한다.

super

상속 계층을 따라가면서 출력 가능한 객체를 탐색한다.
정적 타입을 기준으로 호출 대상을 찾는다

조부모 - 부모 - 자식 관계에서 자식이 super()를 호출 시 부모엔 없고 조부모에게만 있는 메서드를 호출할 수도 있다.
예상하지 못한 동작🔥 발생 가능


위임

클래스 - 인스턴스 간 차이를 제거

객체가 스스로 처리하지 않고 다른 객체에게 책임을 넘기는 방식

  • 상속에서도 암묵적 위임이 일어남
  • 자바스크립트의 prototype 기반 객체 모델도 메시지 위임 체계

일반화 / 특수화 관계

  • 부모 클래스: 자식 클래스를 일반화
  • 자식 클래스: 부모 클래스를 특수화