백엔드/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();
    }
}

TestTest2를 상속받고 있어 Test2의 변경에 대응해야합니다. 즉 유연하지 못합니다.

 

또한 TestTest3를 인스턴스 변수로 가지고 있습니다. HAS-A 관계 입니다.

Test3이 변경되어도 Test에 영향이 적습니다. 유연하게 대응이 가능합니다.

 

따라서 상속을 사용해야할 때는 확실한 IS-A관계에서 사용해야 합니다.

반응형