[Object] 11. 합성과 유연한 설계
in Programming on Java
상속 : 부모클래스와 자식클래스를 연결해서 부모 클래스의 코드를 재사용. is-a 관계. 의존성이 컴파일 타임에 해결됨. 정적인 관계.
합성 : 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용. has0a 관계. 의존성이 런타임에 해결됨. 동적인 관계
코드 재사용을 위해서는 객체 합성이 상속보다 더 좋은 방법이다.
상속을 합성으로 변경
합성을 사용하면 구현이 아닌 public interface에 대해서만 의존할 수 있기 때문에 런타임에 객체의 관계를 변경할 수 있다.
public class Phone{
private RatePolicy ratePolicy;
}
Phone이 RatePolicy 참조자를 포함하는것이 바로 합성이다. Phone은 생성자를 통해 RatePolicy의 인스턴스에 대한 의존성을 주입받는다.
이렇게 하면 코드를 재사용하면서도 건전한 결합도를 유지할 수 있다.
믹스인
객체를 생성할 때 코드 일부를 클래스 안에 섞어 넣어 재사용하는 기법.
컴파일 시점에 필요한 코드 조각을 재사용하는 방법이다.
class TaxableRegularPolicy(
amount: Money
)
extends RegularPolicy(amount)
with TexablePolicy
TexablePolicy를 믹스인한 새로운 클래스 (scala)
–> 이부분은 scala를 안써서 정확히 이해가 안가는데 나중에 scala 공부 후 다시 봐야겠다.