상속은 객체지향에서 코들르 재사용하기 위해 널리 사용되는 기법이다.
상속의 특징
- 상속은 부모 클래스와 자식 클래스 사이의 관계를 컴파일 시점에 결정한다.
- 실행 시점에 객체의 종류를 변경하는 것이 불가능하다.
이 특징으로 인해 두 가지의 문제점이 있다.
- 캡슐화의 위반
-> 상속을 이용하기 위해서는 부모 클래스의 구조를 잘 알고 있어야 한다.
-> 부모 클래스의 구현이 자식 클래스에게 노출되기 때문에 부모 클래스를 변경할 때 자식 클래스도 함께 변경될 확률을 높인다.
-> 상속을 사용한 코드는 변경이 어려워진다. - 설계가 유연하지 않음
합성의 특징
- 합성으로 이루어진 관계는 내부 구현에 대해 외부객체가 알지 못한다.
- 인터페이스에 정의된 메시지를 통해서만 코드를 재사용한다.
이 특징으로 인해 상속이 가지는 두 가지의 문제점을 해결한다.
- 인터페이스에 정의된 메시지를 통해서만 재사용이 가능하기 떄문에 구현을 효과적으로 캡슐화할 수 있다.
- 의존하는 인스턴스를 교체하는 것이 비교적 쉽기 때문에 설계를 유연하게 만든다.
- 상속은 클래스를 통해 강하게 결합되는 데 비해 합성은 메시지를 통해 느슨하게 결합된다.
-> 코드 재사용을 위해서는 상속보다는 합성을 선호하는 것이 더 좋은 방법이다.
하지만 상속을 절대 사용하지 말라는 것은 아니다.
-> 다형성을 위해 인터페이스를 재사용하는 경우에는 상속과 합서을 함께 조합해서 사용할 수 밖에 없다.
'자바' 카테고리의 다른 글
FACTORY 패턴 (2) | 2024.12.20 |
---|---|
디미터 법칙과 캡슐화 (0) | 2024.12.19 |
POLYMORPHISM 패턴 (0) | 2024.12.19 |
캡슐화 (0) | 2024.12.16 |
다형성 (0) | 2024.12.16 |