상세 컨텐츠

본문 제목

[JAVA] 상속(Inheritance)과 구성(Composition)

국비/[JAVA] 관련 상식

by 개발성훈 2020. 5. 13. 12:25

본문

  * 상속을 사용하는 이유

  - 공통적인 부분을 가지고 있는 상위 클래스를 활용하여 하위 클래스는 본인 고유의 상태와 행동을 정의하기 위함이다.

  -코드의 확장성, 재사용성이 용이하고 중복된 코드를 상위 클래스로 빼서 코드가 간결해진다

  - 결과적으로 유지보수가 쉬워진다

 * 상속 정의

  -하위 클래스는 상위 클래스의 모든 메소드를 재사용할 수 있고, 재정의를 하여 하위 클래스만의 메소드로 변경 가능하다.

 

* 상속(Inheritance)과 구성(Compositon)

 >상속의 단점

   - 상속은 단일 패키지에서 사용해야만 안전하다.

   - 하위 클래스는 상위 클래스에 많이 의존하게 된다.

   - 상위 클래스의 코드가 수정되면 하위 클래스의 코드도 수정되어야 하는 경우가 많다. (재정의 메소드)

   - 확장이라는 목표를 두고 상속을 사용하면 괜찮으나, 해당 설계가 아닌 상황에서 상속을 사용할 시 문제를 발생할 수 있다.

   -상속은 캡슐화를 위반한다(하위 클래스가 상위 클래스에 구체적인 구현 내용을 의존하기 있기 때문이다)

 

>구성으로 해결

   - 구성(Composition)은 하위 클래스가 상위 클래스를 상속받는 것이 아니라 단순히 하위 클래스가 상위 클래스를 private으로 참조받아서 사용하는 것이다. 

   - 그 후 상위 클래스에서 필요한 메소드를 가져다 사용하는것이다.

ex>>

 

 

 

 

 

 

 

 

 

 

 

 

 

 * 정리

  - 상속은 상위 클래스와 하위 클래스가 순수한 is-a관계일 때만 사용해야한다.

  - is-a 관계라고 해서 무조건 사용하는 것이 아니라, 같은 패키지에 있어야 하며 상위 클래스가 확장을 고려하여 설계되어 있어야 한다.

  - 상속의 취약점을 피하고 싶다면 Composition을 사용하면 된다.

관련글 더보기