개발의 시작과 끝
2020.05.13 / Day - 31 자바 상속과 구성 본문
31일차
상속을 사용하는 이유
- 공통적인 부분을 가지고 있는 상위 클래스를 활용하여 하위 클래스는 본인 고유의 상태와 행동을 정의하기 위함이다.
- 코드의 확장성, 재사용성이 용이하고 중복된 코드를 상위 클래스로 빼서 코드가 간결해진다.
- 결과적으로 유지보수가 쉬워진다
상속 정의
하위 클래스는 상위 클래스의 모든 메소드를 재사용할 수 있고,
재정의를 하여 하위 클래스만의 메소드로 변경 가능하다.
상속(Inheritance)과 구성(Compositon)
상속의 단점
- 상속은 단일 패키지에서 사용해야만 안전하다.
- 하위 클래스는 상위 클래스에 많이 의존하게 된다.
- 상위 클래스의 코드가 수정되면 하위 클래스의 코드도 수정되어야 하는 경우가 많다. (재정의 메소드)
- 확장이라는 목표를 두고 상속을 사용하면 괜찮으나, 해당 설계가 아닌 상황에서 상속을 사용할 시 문제를 발생할 수 있다.
- 상속은 캡슐화를 위반한다(하위 클래스가 상위 클래스에 구체적인 구현 내용을 의존하기 있기 때문이다)
>구성으로 해결
- 구성(Composition)은 하위 클래스가 상위 클래스를 상속받는 것이 아니라 단순히 하위 클래스가 상위 클래스를 private으로 참조받아서 사용하는 것이다.
- 그 후 상위 클래스에서 필요한 메소드를 가져다 사용하는것이다.
ex >
정리
- 상속은 상위 클래스와 하위 클래스가 순수한 is-a관계일 때만 사용해야한다.
- is-a 관계라고 해서 무조건 사용하는 것이 아니라, 같은 패키지에 있어야 하며 상위 클래스가 확장을 고려하여
설계되어 있어야 한다.
- 상속의 취약점을 피하고 싶다면 Composition을 사용하면 된다.
'풀스택 > 자바 공부, 복습' 카테고리의 다른 글
2020.05.13 / Day - 31 자바 디자인패턴- 스트래티지 패턴 (0) | 2020.05.13 |
---|---|
2020.05.13 / Day - 31 자바 지역변수와 인스턴스 변수 차이 (0) | 2020.05.13 |
2020.05.13 / Day - 31 자바 CGI, 서블릿, 톰캣 (0) | 2020.05.13 |
2020.05.13 / Day - 31 자바 J2EE, JDK, JRE, J2SE 차이 (0) | 2020.05.13 |
2020.05.13 / Day - 31 자바 JVM과 바이트코드 (0) | 2020.05.13 |