<aside> 💡 객체 지향 프로그래밍 입문 시리즈

인프런의 객채 지향 프로그래밍 입문을 기반으로 작성한 게시물 입니다. (본 시리즈의 모든 예시는 JavaScript(TypeScript)로 변환하여 작성하였습니다.)

객체 지향 프로그래밍 입문_1

객체 지향 프로그래밍 입문_2

객체 지향 프로그래밍 입문_3

객체 지향 프로그래밍 입문_4

객체 지향 프로그래밍 입문_5

객체 지향 프로그래밍 입문_6

객체 지향 프로그래밍 입문_7

</aside>

"상속보단 조립"

일반적으로 객체 지향적 프로그래밍이라 말하면 상속을 통한 기능 재사용을 떠올린다.

하지만 이 방법은 단점이 존재하는데

  1. 상위 클래스 변경이 어려움
  2. 클래스의 수 증가
  3. 상속 오용

이 있다.

1. 상위 클래스 변경이 어려움.

여러 하위 클래스에 상속이 된 상위 클래스가 존재 할 때, 이 상위클래스의 코드를 변경하게 되면 그 변경이 모든 하위 클래스에 영향을 준다. 더하여 상위 클래스 입장에서는 앞으로 어떤 하위 클래스가 생길지 모르기 때문에 코드의 변경에 조심스럽게 된다.

2. 클래스 수 증가

스크린샷 2021-11-03 오후 10.46.51.png

위의 도식과 같이 추가적인 기능이 생길 때 마다 하위 클래스를 생성하여야 한다. 이렇게 하위 클래스가 많아지면 나중에 클래스를 생성할 때 어떤 클래스를 상속하는게 맞는지 판단하기가 힘들어 지게 된다.

예를 들어, CacheableEncryptedStorage 클래스는 캐싱이 가능하고 암호화가 가능한 스토리지 기능을 제공한다. 이후 캐시기능이 가능하고 암호화가 가능하며 압축이 가능한 클래스가 필요하다고 할 때 이 클래스는 어떤 것을 상속해야 할까?