상속에 대하여...
그래서 인지 아닌지 논의의 초점은 바뀌었습니다. Abstract 클래스만을 상속하도록 제한되어야 하는가? 아니면 어떤 클래스든 상속을 자유롭게 사용해야 하는가?로 바뀌었습니다. 이 둘중에 어느 한쪽 만을 굳이 선택해야 한다면 전 자유로운 상속을 택하겠습니다. 둘의 가장 큰 차이는 상위 타입의 객체를 만들 수 있느냐 없느냐인 것 같은데 물론 경우에 따라서 상위 타입의 객체 생성을 자제 해야하는 경우도 있겠지만 Abstract 클래스만 상속하도록 제한한다면 개발이 형식에 얽매여서 필요없는 일까지 하게될 상황이 발생하게 될 수 있다는 생각을 해봅니다.
Abstact 클래스만 상속하도록 바껴야 한다. 라는 규율? 규칙이 있는 환경에서 개발을 한다고 생각해보면 다음과 같은 클래스 구조가 생길 것입니다.
1136697125.bmp어디선가는 객체를 써야 하기 때문에 결국 클래스를 만들게 되겠지요. 이렇게 시스템을 만들어 둔 상태에서 새로운 요구사항이 생겨서 정삼각형, 직각 삼각형 등을 추가하게 됐다면 어떻게 고쳐야 할까요?
1143458043.bmp당연히 이렇게 되어야 한다고 생각합니다. 기존에 Triangle 객체를 사용하던 사람들도 여전히 사용할 수 있고 새로 추가된 RegularTriangle과 RightTriangle 객체도 사용할 수 있게됐으니 말이죠.
하지만 Abstract 클래스만 상속 받아야 한다면 어떻게 해야할까요?
1143637301.bmp이렇게 하지 않을까요? 이렇게 하면 기존의 Triangle에 있던 멤버들과 중복이 발생하게 되는 것 아닐까요? 아니면 다음과 같이 기존의 Triangle 클래스를 Abstract로 바꿀수도 있습니다.(주로 성일이형이 말씀하시던게 바로 이 그림이 아닐런지 생각해 봅니다.)
1344920669.bmp이렇게 되면 Triangle에 있는 자원을 재사용 할 수 있게 되어 괜찮지 않을까 생각할 수 있지만 기존에 Triangle 클래스를 사용하던 소스코드들은 그럼 전부 어떻게 되는거죠? 따라서 Abstract 클래스만 상속을 하도록 제약하는 것은 개발을 너무 힘들게 하는 일이라고 생각합니다.