item 18 : 상속보다는 컴포지션을 사용하라
1. 구현 상속
1) 상속이란
2) 상속의 문제점
3) 메서드 호출과 달리 상속은 캡슐화를 깨뜨린다.
public class InstrumentedHashSet<E> extends HashSet<E> {
private int addCount = 0;
public InstrumentedHashSet() { }
@Override
public boolean add(E e) {
addCount++;
return super.add(e);
}
@Override
public boolean addAll(Collection<? extends E> c) {
addCount += c.size();
return super.addAll(c);
}
public int getAddCount() {
return addCount;
}
}
2. 컴포지션(composition)
3. 상속과 컴포지션의 비교
1) 상속(Inheritance)의 예시
부모 클래스: ElectronicDevice
ElectronicDevice자식 클래스: Smartphone
Smartphone사용 예시
2) 컴포지션(Composition)의 예시
독립된 기능을 가진 클래스: Battery
Battery컴포지션을 사용하는 클래스: Laptop
Laptop사용 예시
3) 상속과 컴포지션의 비교
1. 관계의 차이
2. 코드 재사용 측면
3. 유연성과 유지보수성
4. 다형성 활용
4) 🤔 언제 상속과 컴포지션을 사용해야 할까?
상속을 사용해야 하는 경우
컴포지션을 사용해야 하는 경우
5) 상속과 컴포지션의 장단점
상속의 장점
상속의 단점
컴포지션의 장점
컴포지션의 단점
추가 예시: 도형(Drawing) 프로그램에서의 상속과 컴포지션
✨ 정리
Last updated