상속 문제 : Property extends Hashtable, Stack extends Vector

Dayeon myeong·2022년 3월 6일
1

면접

목록 보기
13/35

java.util.Property extends Hashtable, java.util.Stack extends Vector 같은 클래스는 상속으로 망한 대표 사례입니다. 이유를 설명해 주세요.

상속을 통해 하위클래스의 캡슐화를 깨트리기 때문이다.

예를 들어, HashTable을 통해 Property에 접근이 가능하게 되었다.

Properties 타입은 본래 문자열 key, value만 넣을 수 있다.
그런데 상위 클래스인 HashTable을 통해서 문자열 이외의 타입을 넣을 수 있다는 것이다. 그래서 이후에 Properties의 load, store와 같은 Properties API도 사용할 수 없게 되었다.

또한 HashTable의 모든 메서드를 물려받는 것이기 때문에 메서드 사용에 있어서 사용자는 매우 혼란스럽게 되었다.

Properties p

...

p.getProPerty(key) //Properties의 동작

p.get(Key) // Hashtable로부터 물려받은 메서드

Properties 타입의 인스턴스 p가 있을 때 p.getProPerty(key) 는 p.get(key)는 결과가 다를 수 있다. getProperty(key)는 Properties의 기본동작인데 반해, get(key)는 HashTable의 메서드이기 때문이다.

참고

이펙티브 자바 아이템 18

profile
부족함을 당당히 마주하는 용기

0개의 댓글