기초 개발상식 및 개념들 - 2
1. 상속과 재사용
1.1 상속을 통한 재사용 단점
상위클래스의 변경이 어렵다.
상위클래스를 변경하게되면 그에 해당하는 하위클래스 모두에게 영향을 줄 수 있다. 상위클래스 입장에서 앞으로 어떤 하위클래스가 생길지 모르기 때문에 쉽게 변경하기 어렵다.
클래스가 증가할 수 있다.
상속 오용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24// 예시 코드
public class Container extends ArrayList<Luggage> {
private int maxSize;
private int currentSize;
public Container(int maxSize) {
this.maxSize = maxSize;
}
public void put(Luggage lug) throws NotEnoughSpaceException{
if(!canContain(lug)){
throw new NotEnoughSpaceException();
}
super.add(lug);
currentSize += lug.size();
}
public void extract(Luggage lug) {
super.remove(lug);
this.currentSize -= lug.size();
}
public boolean canContain(Luggage lug) {
return maxSize >= currentSize + lug.size();
}
}이러한 경우에
put()
메소드를 사용해야Luggage
사이즈를 변경할 수 있는데 Container 클래스를 상속받아서 사용하는 입장에서는 ArrayList클래스의add()
도 함께 상속받고, 사용가능하기 때문에put
과add
이 의미상 같기 때문에 오용할 수 있다. 오용한 사람보다Container
클래스를 오용하게끔 설계한 사람에게 더 잘못이 있다.
1.2 상속의 단점 해결방법
1.2.1 조립
여러
객체
를 묶어서 더 복잡한 기능을 제공보통
필드
로 다른 객체를 참조하는 방식으로 조립 또는 객체를 필요시점에 생성
1.2.2 조립을 통한 기능 재사용
이전코드에서
ArrayList<Luggage>
를 상속을 받아서 사용하고있는데 이 클래스는Container
클래스에서만 사용되어야하기 때문에 상속하지않고, 필드생성으로 재사용을 한다.상속하기에 앞서 조립으로 풀 수 없는지 검토를 먼저 해볼 것.
- 진짜 하위타입인 경우에만 상속을 사용한다.
- 객체지향적 사고를 제대로 갖추기 위해서 기초적인 것부터 하나씩 다시 공부하고있는데 개념으로는 알겠는데 막상 코드로 직접 설계하고, 구현해보려고하니 한계가 있었다. 잘짜여진 코드를 많이보고 연구해보아야 할 것 같다.
inflearn 객체 지향 프로그래밍 입문 강의를 보고 작성한 글입니다.
- velog
- Blog