상속 주의점

· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 20. 추상 클래스보다는 인터페이스를 우선하라. 자바가 제공하는 다중 구현 매커니즘 추상 클래스 인터페이스 (자바 8부터 디폴트 메서드를 제공할 수 있음) 위 두 매커니즘의 가장 큰 차이 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 함 자바는 단일 상속만 지원하니, 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약을 가짐 인터페이스가 선언한 메서드를 모두 정의하고 그 일반 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했던 간에 같은 타입으로 취급됨 인터페이스의 장점 1) 기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다. 인터페이스가 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 아이템 18에서 상속을 염두하지 않고 설계한 '외부' 클래스를 상속할 때에 대한 주의점을 알아보았다. 여기서 '외부'란, 프로그래머의 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻. 상속을 고려한 설계와 문서화 * 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용) 문서로 남겨야 한다. 클래스의 API로 공개된 메서드에서 클래스 자신의 또 다른 메서드를 호출할 수도 있다. 그런데 마침 호출되는 메서드가 재정의 가능 메서드인 경우 그 사실을 호출하는 메서드의 API 설명에 기입해야 한다. 어떤 ..
· BE/Java
이 포스팅에서 작성하는 내용은 EFFECTIVE JAVA(이펙티브자바) 에서 발췌하였습니다. 아이템 18. 상속보다는 컴포지션을 사용하라 상속은 코드를 재사용하는 강력한 수단이지만, 유의해서 사용하는 것이 좋다. 다른 패키지의 구체클래스를 상속하는 일은 위험하다. 여기서의 '상속'은 클래스가 다른 클래스를 확장하는 구현 상속을 말한다. (클래스가 인터페이스를 구현하거나, 인터페이스가 다른 인터페이스를 구현해서 확장하는 상속과는 무관함) 상속 시, 유의해야할 점 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다. 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있음. ex 1) 잘못된 상속 사용의 예 public class InstrumentedHashSet extends HashS..
멍목
'상속 주의점' 태그의 글 목록