📖책의 내용을 요약하니 자세한 부가설명이 궁금하시면 보시는걸 추천드립니다. 📖
객체 지향과 디자인 패턴 - 교보문고
■ 책에서 다루는 내용- 객체 지향 (객체, 책임, 의존, 캡슐화)- 다형성과 추상화- 상속보단 조립- SOLID 설계 원칙- DI와 서비스 로케이터- 주요 디자인 패턴■ 베타 리더들의 서평책 전반에서 상황
www.kyobobook.co.kr
1. 상속과 재사용
상속은 기능을 재사용하는 매력적인 방법이다. 하지만 상속은 변경의 유연함이라는 측면에서 치명적인 단점을 갖는다.
1.1 상속을 통한 재사용의 단점 1. 상위 클래스 변경의 어려움
첫번째, 상속은 상위 클래스의 변경을 어렵게 만든다.
클래스를 상속받는 것은 상위 클래스에 의존한다는 뜻, 상위 클래스의 변경이 하위 클래스에 영향을 주기 때문에 최악의 경우 상위 클래스 변화가 모든 하위 클래스에 미칠 수 있다.
클래스 계층도가 커질 수록 상위 클래스 변경하기가 어려워 진다.
* 의존한다는 것은 의존하는 대상이 변경되면 영향을 받는다는 의미, 챕터2에서 언급된 순환 의존을 떠올리자
1.2 상속을 통한 재사용의 단점 2. 클래스의 불필요한 증가
두번째, 유사한 기능을 확장하는 과정에서 클래스의 개수가 불필요하게 증가한다.
새로운 기능들을 구현하려는데 이미 비슷한 기능을 가진 클래스가 있다면 재사용하기 위해 상속을 받아 일부분만 추가할 수 있다.
이런 상황이 반복된다면 기능 재사용하기 위한 상속 덕분에 클래스 개수가 많아진다.
1.3 상속을 통한 재사용의 단점 3. 상속의 오용
세번째, 상속 자체를 잘못 사용할 수 있다.
상속은 IS-A 관계가 성립할 때 사용해야한다. 비슷한 기능을 재사용하기 위해 상속을 받았는데 알고봤더니 상위 클래스가 해당 기능을 전혀 다른 의미로 사용하고 있다면 상위 클래스와 하위 클래스는 서로 다른 책임을 갖게 되고 잘못된 사용으로 문제가 발생한다.
2. 조립을 이용한 재사용
객체 조립(composition)은 여러 객체를 묶어서 더 복잡한 기능을 제공하는 객체를 만들어낸다.
한 객체가 다른 객체를 필드로 갖는다는 것은 다른 객체의 기능을 사용한다는 의미를 내포한다.
다음과 같은 장점을 갖는다.
- 상속의 문제점을 해결한다.
- 런타임에 조립 대상 객체를 교체할 수 있다.
단점은 상속보다 구현하기 어렵다 하지만 장점이 너무 크기 때문에 재사용이 필요할 경우 상속보단 조립을 먼저 고려한다.
2.1 위임
위임(delegation)은 할 일은 다른 객체에게 넘긴다는 의미로 보통 조립 방식에서 사용된다.
class Point {
...
public boolean isPointDiscount(Product product) {
return (product.getPrice() / 10) >= point;
}
}
class Product {
...
}
class Order {
private Point point;
private Product product;
...
public void order() {
// 포인트 할인 여부를 Point에게 위임한다.
if (point.isPointDiscount(product)) {
...
};
}
}
* 위임은 다른 객체에게 요청하는 것으로 호출이 추가되어 실행 시간은 다소 증가한다. 하지만 미세한 성능 저하보다는 위임으로 얻을 수 있는 유연함/재사용 장점이 크다.
2.2 상속은 언제 하나?
상속은 명확한 IS-A 관계에서 점진적으로 상위 클래스의 기능을 확장해 나갈 때 사용할 수 있다.
이후에 클래스의 개수가 불필요하게 증가하거나 상위 클래스의 변경이 어려워지면 조립으로 전환하는 것도 고려해봐야한다.
'서적 > 객체지향과 디자인패턴' 카테고리의 다른 글
챕터6, DI(Dependency Injection)와 서비스 로케이터 (0) | 2021.06.04 |
---|---|
챕터5, 설계 원칙 : SOLID (0) | 2021.06.03 |
챕터3, 다형성과 추상 타입 (0) | 2021.06.03 |
챕터2, 객체지향 (0) | 2021.06.02 |
객체지향과 디자인패턴을 시작하며 (0) | 2021.06.02 |