Composition

기존 클래스가 새로운 클래스의 구성요소가 되는것

상속

장점

  • 코드의 재사용을 통해서 중복을 줄인다.
  • 확장성이 증가한다.
  • 클래스 간의 계층적 관계를 구성함으로써 다형성을 구현할 수 있다.
  • 개발 시간이 단축된다.

단점

  • 캡슐화를 깨뜨린다.
    • 상위 클래스의 구현이 하위 클래스에게 노출되기 때문에 캡슐화가 깨진다.
    • 따라서 자식 클래스가 부모 클래스에 강하게 결합 및 의존하게 된다.
    • 부모 클래스의 내부 구현이 달라지면 코드 한줄 건드리지 않은 하위 클래스가 오작동할 수 있다.
    • 부모클래스의 결함이 자식 클래스에게 넘어온다.

컴포지션

  • 상속처럼 기존의 클래스를 확장하는 것이 아닌, 새로운 클래스를 생성하여 private 필드로 기존 클래스의 인스턴스를 참조하는 방식이 바로 컴포지션이다.
    • forwarding이라고도 부른다.
  • 새로운 클래스이기 때문에, 여기서 어떤한 생성 작업이 일어나더라도 기존의 클래스는 전혀 영향을 받지 않는다는 점이 핵심이다.
  • 메서드를 호출하는 방식으로 동작하기 때문에 캡슐화를 깨뜨리지 않는다.
  • 상위클래스에 의존하지 않기 때문에 변화에 유연하다.

일반적으로 상속은 Is -a 관계에 있다고 표현한다.

조합도 이와 비슷하게 Has -a 관계에 있다.

그렇다면 상속은 사용하면 안될까?

답은 아니다. 쓰는 경우가 따로 명확히 존재한다는 뜻!

상속을 써야하는 경우

  • 명확한 Is -a 관계의 경우
  • 상위 클래스가 확장할 목적으로 설계되었고 문서화도 잘되어 있는 경우

'Computer science > JAVA' 카테고리의 다른 글

Interned String in Java  (0) 2023.03.22
Error & Exception  (0) 2023.03.16
GC  (0) 2023.03.16
JVM  (0) 2023.03.16
Instrinsic Lock  (0) 2023.01.08

+ Recent posts