Inheritance vs Composition

보트·2023년 11월 9일
0

JAVA

목록 보기
8/8

Inheritance

Inheritance?

  • 현실 상속?
    : 부모가 자식에게 물려주는 행위, 부모가 자식 선택
  • 자바 상속?
    : 부모 클래스가 자식 클래스에게 멤버를 물려주는 행위, 자식 클래스가 부모 클래스 선택

private 멤버는 상속에서 제외 !!
부모 클래스와 자식 클래스가 다른 패키지에 존재하는 경우 >> default도 상속에서 제외 !!

Inheritance 장점

Inheritance 단점

  • 상속은 자식 클래스가 부모 클래스에 강하게 의존
    : 결합도 높아짐
  • 캡슐화가 잘 지켜지지 않음
    : 부모 클래스의 코드를 수정했을 때, 그 멤버를 사용하는 자식 클래스의 코드도 변경해야 하는 경우 생길 수 있음
    : 불필요한 메서드도 상속받는 경우 생길 수 있음
    ex) public class Stack extends Vector
    -> add 메서드 : 순서 상관 없이 특정 인덱스에 원소 추가 가능
    -> 사실 Vector의 add를 상속받은 것
    기대하지 않은 결과 생성

Composition

사실 조합이라는 단어가 익숙치 않다 뿐, 사용하고 있었음

Composition?

기존 클래스를 확장하는 대신에 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조하도록 만드는 설계
그리고 인스턴스의 메서드를 호출

Composition 장점

  • 새로운 클래스는 기존 클래스의 내부 구현 방식의 영향에서 벗어남
    (기존 클래스에 새로운 메서드가 추가되더라도 전혀 영향을 받지 않음)
    (부분 객체의 내부 구현이 공개되지 않음)

  • 메서드를 호출하는 방식으로 동작하기 때문에 캡슐화를 깨뜨리지 않음

  • 상위 클래스에 의존하지 않기 때문에 변화에 유연함

Composition 단점

비교

ex) public class Stack extends Vector
-> public class CompositionStack {
private Vector vector = new Vector<>();
}
Stack에 필요했던 메서드만 Vector의 public 메서드를 호출해 새로 구현

profile
일주일에 한 번

0개의 댓글