상속과 위임

Jimin·2022년 8월 9일
0

JAVA

목록 보기
5/25
  • 객체지향프로그래밍에서 서로 연관된 객체들의 관계를 표현할 때 상속(inheritance)와 위임(delegation)관계로 많이 표현한다.
  • 상속과 위임은 각각 장단점이 존재하며 사용해야하는 상황이 다르기 때문에 무분별하게 남용하게 되면 클래스 간의 결합도가 강해지거나 의존성이 높아지는 등 오히려 설계에 어려움이 생기게 될 수도 있다.

상속

  • 클래스 사이의 관계
  • 상속은 extends 키워드를 통해 부모의 속성들을 자식이 물려 받아서 사용할 수 있도록 해주는 관계이다.
  • 부모의 속성을 물려 받기 때문에 자식은 부모의 코드를 작성하지 않고 사용함으로써 구현하기가 수월해진다.
  • 코드를 작성하지 않아도 내 코드인 것 처럼 사용할 수 있다는 점이 엄청난 메리트이다.
  • 하지만, 그 메리트만큼 부모와 강한 결합도를 가지게 됨으로써 변화에 대응하기가 어려워 진다.
    • 간단한 예로 부모의 속성을 변경하게 되면, 이를 그대로 사용하는 자식에게 영향이 미치기 때문에 곤란한 상황이 발생할 수 있게 된다.
  • 부모의 속성들을 모두 사용하지 않는 경우에도 상속을 사용해버리면 코드가 쓸데 없이 복잡해지고 유지 보수하기가 어렵게 된다.
    ⇒ 변화가 자주 일어나는 상황에는 상속보다는 위임을 사용해야 한다.

위임

  • 클래스의 인스턴스를 가지고 있는 상태
  • 위임이라는 말 그 자체로 어떤 행위를 위임 관계에 있는 객체에게 넘겨서 처리한는 것을 의미한다.
  • 두 클래스의 관계가 상속 관계로 확고하고 변경 가능성이 낮거나, 먼 미래의 변화, 유지보수 등을 고려해도 효율적인 경우
  • 두 클래스의 관계가 IS-A 관계인 경우
  • 기존에 존재하는 API에 코드를 넘겨줘야 하는 경우
    → 상속 사용
  • 코드의 변화가 자주 일어나는 상황
  • final 클래스를 확장하고 싶은 경우
    → 위임 사용
profile
https://github.com/Dingadung

0개의 댓글