GoF의 디자인 패턴에서는
> Inheritance를 통한 재사용을 white-box reuse
> Composition을 통한 재사용을 black-box reuse
으로 정의 한다. Inheritance와 Composition의 장단점을 명확히 파악하고 적절한 곳에 사용하는 것이 중요하다.
White-box (Inheritance)
투명한 상자 안에 어떤 것이 들어 있는지 밖에서 볼수있다는 뜻.
장점
ü 오버라이딩을 통해 슈퍼클래스의 구현을 손쉽게 재정의가 가능하다.
단점
ü 슈퍼클래스의 구현이 변경되면 그 하위 클래스 모두를 변경해야한다.
ü 상속시 슈퍼클래스가 하위클래스에 불필요하게 많은 부분이 노출되어 하위클래스가
슈퍼클래스의 구현에 종속됨으로 써 캡슐화에 위배가 된다.
ü 컴파일 시점에 상속에 의한 객체의 형식이 이미 결정된다 (한개의 부모 클래스만 상속 받기 때문에)
ü 시스템이 진화 할수록 새로운기능이 추가되거나 오류 수정으로 인해 상속관계가 복잡해진다.
Black-box (Composition)
상속과 달리 내부가 비치지 않아 밖에서 박스 안을 볼 수 없다는 뜻.
장점
ü 객체합성은 객체가 다른객체의 참조를 얻는 방식으로 런타임 시에 동적으로 이뤄지기 때문에 해당 객체의 인터페이스만을 바라보게 됨으로써 캡슐화가 잘 이루어질 수 있다.
단점
ü 객체간의 관계가 수평관계가되어 객체나 메소드명이 명확하지 않으면 코드의 가독성이 떨어지고 이해하기 어렵다.
ü 용도에 따라 클래스들을 패키지로 적절하게 분리하고 사용 용도가 명확하게 들어나도록 인터페이스를 잘 설계해야 함
출처 : 자바 I/O & NIO 네트워크 프로그래밍, 김성박.송지훈 공저
'Java > Classes Relationships' 카테고리의 다른 글
동적 클래스 로딩 - 클래스 이름으로 클래스를 동적으로 로딩한다. (0) | 2013.10.23 |
---|---|
어댑터로 사용된 Inner Class (0) | 2013.10.23 |
Interface vs Abstract (0) | 2013.10.18 |
Simple UML Tutorials (0) | 2013.02.12 |
Interface as Callback (0) | 2013.02.06 |