상속보다는 구성을 사용하라.
Inheritance를 사용하는 경우에, class들은 모두 super class의 속성을 가진다. 따라서, super class들의 method를 override하는 경우에, 같은 기능이 들어가야하는 method는 코드가 duplicate될 수 있다.
Java의 경우 reference를 이용하여, attribute로 선언해 놓고, 필요할 때마다 잘 작성된 behavior를 할당하여 사용할 수 있다. 이렇게 하면, 내가 필요한 behavior만 class가 가질 수 있고, 실행시간에 동적으로 attribute를 교체할 수도 있다.
그리고 의미상으로도 한가지 장점이 있다.
예를 들어, thread로 동작하는 dog가 있다고 하자. thread를 구현하는 방법에는 몇가지가 있겠지만, thread를 dog가 상속하는 것은 뭔가 문맥에 맞지 않는다.(dog의 parent가 thread라니..) 따라서 상속보다는 구성을 이용할 수 있다.
Strategy pattern을 적용하여, family of algorithms를 잘 define한 후에 바로 구성을 이용하여 멤버로 사용할 수 있다.
Inheritance를 사용하는 경우에, class들은 모두 super class의 속성을 가진다. 따라서, super class들의 method를 override하는 경우에, 같은 기능이 들어가야하는 method는 코드가 duplicate될 수 있다.
Java의 경우 reference를 이용하여, attribute로 선언해 놓고, 필요할 때마다 잘 작성된 behavior를 할당하여 사용할 수 있다. 이렇게 하면, 내가 필요한 behavior만 class가 가질 수 있고, 실행시간에 동적으로 attribute를 교체할 수도 있다.
그리고 의미상으로도 한가지 장점이 있다.
예를 들어, thread로 동작하는 dog가 있다고 하자. thread를 구현하는 방법에는 몇가지가 있겠지만, thread를 dog가 상속하는 것은 뭔가 문맥에 맞지 않는다.(dog의 parent가 thread라니..) 따라서 상속보다는 구성을 이용할 수 있다.
Strategy pattern을 적용하여, family of algorithms를 잘 define한 후에 바로 구성을 이용하여 멤버로 사용할 수 있다.
이올린에 북마크하기