백엔드/Java
상속과 컴포지션
infitry
2022. 9. 16. 19:02
반응형
상속과 컴포지션에 대해 알아보겠습니다.
상속은 부모클래스의 정의된 필드와 메서드를 자식클래스에서 물려 받는 것이고
컴포지션은 private 필드를 통하여 기존 클래스에 다른 클래스 인스턴스를 전달받는 것 입니다.
위의 설명 클래스들이 아래 소스에서와 같이 기존 클래스(Test)와 부모클래스(Test2), 다른 클래스(Test3)이 있습니다.
public class Test extends Test2 { // 상속
private final Test3 test3; // 컴포지션
public Test(Test3 test3) {
this.test3 = test3;
}
@Override
protected void on() {
super.on();
test3.on();
}
public static void main(String[] args) {
Test test = new Test(new Test3());
test.on();
}
}
Test는 Test2를 상속받고 있어 Test2의 변경에 대응해야합니다. 즉 유연하지 못합니다.
또한 Test는 Test3를 인스턴스 변수로 가지고 있습니다. HAS-A 관계 입니다.
Test3이 변경되어도 Test에 영향이 적습니다. 유연하게 대응이 가능합니다.
따라서 상속을 사용해야할 때는 확실한 IS-A관계에서 사용해야 합니다.
반응형