* 상속을 사용하는 이유
- 공통적인 부분을 가지고 있는 상위 클래스를 활용하여 하위 클래스는 본인 고유의 상태와 행동을 정의하기 위함이다.
-코드의 확장성, 재사용성이 용이하고 중복된 코드를 상위 클래스로 빼서 코드가 간결해진다
- 결과적으로 유지보수가 쉬워진다
* 상속 정의
-하위 클래스는 상위 클래스의 모든 메소드를 재사용할 수 있고, 재정의를 하여 하위 클래스만의 메소드로 변경 가능하다.
* 상속(Inheritance)과 구성(Compositon)
>상속의 단점
- 상속은 단일 패키지에서 사용해야만 안전하다.
- 하위 클래스는 상위 클래스에 많이 의존하게 된다.
- 상위 클래스의 코드가 수정되면 하위 클래스의 코드도 수정되어야 하는 경우가 많다. (재정의 메소드)
- 확장이라는 목표를 두고 상속을 사용하면 괜찮으나, 해당 설계가 아닌 상황에서 상속을 사용할 시 문제를 발생할 수 있다.
-상속은 캡슐화를 위반한다(하위 클래스가 상위 클래스에 구체적인 구현 내용을 의존하기 있기 때문이다)
>구성으로 해결
- 구성(Composition)은 하위 클래스가 상위 클래스를 상속받는 것이 아니라 단순히 하위 클래스가 상위 클래스를 private으로 참조받아서 사용하는 것이다.
- 그 후 상위 클래스에서 필요한 메소드를 가져다 사용하는것이다.
ex>>
* 정리
- 상속은 상위 클래스와 하위 클래스가 순수한 is-a관계일 때만 사용해야한다.
- is-a 관계라고 해서 무조건 사용하는 것이 아니라, 같은 패키지에 있어야 하며 상위 클래스가 확장을 고려하여 설계되어 있어야 한다.
- 상속의 취약점을 피하고 싶다면 Composition을 사용하면 된다.
웹서버 NGINX란? (0) | 2020.05.19 |
---|---|
[JAVA] Parsing이란 무엇인가? (0) | 2020.05.19 |
[JAVA] 지역변수와 인스턴스 변수 차이 (0) | 2020.05.13 |
[JAVA] 디자인패턴- 스트래티지 패턴(Strategy Pattern) (0) | 2020.05.13 |
[JAVA] 절차지향 언어와 객체 지향 언어의 차이 (0) | 2020.05.13 |