728x90
상속 → “이 객체는 이런 기능을 갖는다”
조합 → “이 객체는 저 객체를 사용해서 일한다”
위임 → “이 객체는 저 객체에게 일을 시킨다”
상속은 컴파일 시점에 부모와 자식의 관계가 결정되기 때문에 결합도가 높다. 조합과 위임을 통해 유연성을 높이고, 조합과 위임의 하드코딩으로 인해 발생되는 경직성을 해결하기 위해 의존성 주입이 도입되었다.
꼬리질문 1:
상속은 곧 확장이기도 하다. 그리고 부모 클래스의 멤버 변수 및 메서드에 접근할 수 있다는 것이지 반드시 써야 되는 것도 아니다. 얼마든지 자식 클래스만의 멤버를 만들어서 자유롭게 확장할 수 있는데 왜 유연하지 못하다고 하는 것일까?
꼬리답변 1:
컴파일 타임 확장과 런타임 확장의 차이이다.
컴파일 타임에 상속과 조합은 아래와 같이 결정된다:
상속 → “이 객체는 이런 기능을 갖는다”가 정해짐
조합 → “이 객체는 저 객체를 사용해서 일한다”가 정해짐
따라서, 런타임으로 넘어오면
상속 → 이 객체는 이런 기능을 갖는 것이 정해졌기 때문에 중간에 기능 변경 불가
조합 → 이 객체가 갖고 있는 “저” 객체를 “그” 객체로 바꿔서 사용 가능
//상속
Warrior warrior = new Warrior();
// warrior는 태어날 때부터 죽을 때까지 Warrior
// Mage로 변신? 불가능. 아예 다른 객체를 새로 만들어야 함
//조합
Character character = new Character();
character.setWeapon(new Sword()); // 검사
character.setWeapon(new MagicWand()); // 마법사로 변신
character.setWeapon(new Bow()); // 궁수로 또 변신
// 같은 character 객체인데 행동이 완전히 달라짐
'객체지향' 카테고리의 다른 글
[객체지향]다형성은 어떻게 코드로 구현되는가? (0) | 2025.07.09 |
---|