합성(Composite) 관계

HEP·2023년 1월 4일
0

OOP & Design Pattern

목록 보기
3/5

상속의 한계

  • 캡슐화가 깨지고 결합도가 높아짐
  • 유연성 및 확장성이 떨어짐
  • 클래스 폭발
    -----> 상속 대신 합성 사용 권장

합성이란

  • 다른객체의 인스턴스를 자신의 인스턴스 변수로 포함해서 메서드를 호출하는 기법이다.(필드로 클래스의 인스턴스를 참조= forwarding method)
  • 다른객체의 인스턴스이므로 인터페이스를 이용하면 Type을 바꿀 수 있다.
  • 부모클래스가 없으면 자식클래스도 없다.즉, 자식 클래스가 부모 클래스에 종속됨. (cf. 반면, Aggregation 집합관계의 경우 부모클래스가 없어도 자식 클래스는 존재한다.)
  • 구현에 의존하지 않고 내부에 포함되는 객체의 구현이 아닌 인터페이스에 의존.
  • 두 객체 사이의 의존성은 런타임에 해결(상속의 경우, 컴파일 타임에 해결)
  • 개체 사이의 동적인 관계
class Child{
	private int num;
}

class Parent{
	private Child chi;
    public Parent(){
    	chi = new Child()
    }
}

합성 사용 케이스

  • 부모와 자식 클래스가 Has - A 관계인 경우
  • 클래스 간의 관계가 확실하게 정해져 있지 않을 때(상속은 Is-A)

참고
클래스관계
코드의 재사용, 상속보다 합성을 사용해야 하는 이유
상속을 자제하고 합성(Composition)을 이용하자
OOP Concepts for Beginners: What is Composition?

profile
셀포합니다

0개의 댓글