private 멤버는 상속에서 제외 !!
부모 클래스와 자식 클래스가 다른 패키지에 존재하는 경우 >> default도 상속에서 제외 !!
사실 조합이라는 단어가 익숙치 않다 뿐, 사용하고 있었음
기존 클래스를 확장하는 대신에 새로운 클래스를 만들고 private 필드로 기존 클래스의 인스턴스를 참조하도록 만드는 설계
그리고 인스턴스의 메서드를 호출
새로운 클래스는 기존 클래스의 내부 구현 방식의 영향에서 벗어남
(기존 클래스에 새로운 메서드가 추가되더라도 전혀 영향을 받지 않음)
(부분 객체의 내부 구현이 공개되지 않음)
메서드를 호출하는 방식으로 동작하기 때문에 캡슐화를 깨뜨리지 않음
상위 클래스에 의존하지 않기 때문에 변화에 유연함
ex) public class Stack extends Vector
-> public class CompositionStack {
private Vector vector = new Vector<>();
}
Stack에 필요했던 메서드만 Vector의 public 메서드를 호출해 새로 구현