기초 개발상식 및 개념들 - 2 (상속과 재사용)

JeongMin·2018년 12월 15일
1
post-thumbnail

1. 상속과 재사용

1.1 상속을 통한 재사용 단점

  • 상위클래스의 변경이 어렵다.

    상위클래스를 변경하게되면 그에 해당하는 하위클래스 모두에게 영향을 줄 수 있다. 상위클래스 입장에서 앞으로 어떤 하위클래스가 생길지 모르기 때문에 쉽게 변경하기 어렵다.

  • 클래스가 증가할 수 있다.

  • 상속 오용

// 예시 코드
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()도 함께 상속받고, 사용가능하기 때문에 putadd이 의미상 같기 때문에 오용할 수 있다. 오용한 사람보다 Container클래스를 오용하게끔 설계한 사람에게 더 잘못이 있다.

1.2 상속의 단점 해결방법

1.2.1 조립

  • 여러객체를 묶어서 더 복잡한 기능을 제공

  • 보통필드로 다른 객체를 참조하는 방식으로 조립 또는 객체를 필요시점에 생성

1.2.2 조립을 통한 기능 재사용

  • 이전코드에서 ArrayList<Luggage>를 상속을 받아서 사용하고있는데 이 클래스는 Container클래스에서만 사용되어야하기 때문에 상속하지않고, 필드생성으로 재사용을 한다.

  • 상속하기에 앞서 조립으로 풀 수 없는지 검토를 먼저 해볼 것.

  • 진짜 하위타입인 경우에만 상속을 사용한다.


  • 객체지향적 사고를 제대로 갖추기 위해서 기초적인 것부터 하나씩 다시 공부하고있는데 개념으로는 알겠는데 막상 코드로 직접 설계하고, 구현해보려고하니 한계가 있었다. 잘 짜여진 코드를 많이보고 연구해보아야 할 것 같다.


profile
안녕하세요 https://ggomi.github.io

1개의 댓글

comment-user-thumbnail
2018년 12월 17일

잘보고가용

답글 달기