상속의 단점 3가지는 다음과 같다.
첫번째 단점: 상위 클래스 변경의 어려움이 있다.
상위 클래스가 변경되면 하위 클래스도 영향을 받기에 하위 클래스도 수정해야하는 단점이 있다.
두번째 단점: 클래스의 불필요한 증가를 유발할 수 있다.
해당 기능이 필요해서 상속을 받아 클래스를 만들었다. 그런데 이후 또 다른 기능이 필요해서 상속 받은 클래스에서 다시 상속을 받는 클래스를 만들었다. 이는 계층 구조가 계속 깊어지며 유지보수가 어렵고 재사용의 장점인 상속의 장점도 없어지게 된다.
세번째 단점: 상속을 잘못 사용할 수 있다.
상속은 IS-A 관계일 때 사용하는 것이다. 같은 책임을 갖는 관계가 되야한다. 그런데 비슷한 책임을 갖고 있다고 사용했다가 IS-A 관계가 아니여서 원하지 않는 방식으로 동작할 수 있다.
보완점은 다음과 같다.
Composition을 이용한다. 구성, 합성, 조립이라고 한다. 여러 객체를 묶어서 더 복잡한 기능을 제공하는 객체를 만드는 것이다.
코드 수정에 있어서 유연함이 있기에 Composition을 사용한다.
Composition 사용 방법은 객체를 new로 생성해서 그 객체에게 책임을 위임하는 것이다.
public boolean contains(Point point) {
Bounds bounds = new Bound(x, y, width, height);
return bounds.contains(point.getX(), point.getY());
}
참고:
'객체지향과 디자인패턴' 카테고리의 다른 글
[객체지향과 디자인 패턴] 캡슐화를 하는 이유 (0) | 2024.02.29 |
---|
댓글