오브젝트

Ch05. 변경과 설계 - 캡슐화

webmaster 2024. 10. 12. 18:56
728x90

변경 관점에서의 캡슐화

변경 관점에서의 캡슐화는 변하는 부분을 내부로 숨기는 추상화 기법을 의미한다. 즉, 캡슐화는 변하는 부분과 변하지 않는 부분을 식별한 후에 변하는 부분을 안정적인 부분 뒤로 감추는 기법이다. 

  • 캡슐화는 낮은 결합도의 기반이다.
    • 인터페이스 뒤로 구현을 감춤으로써, 변하는 부분을 캡슐화

타입 캡슐화

타입의 변경을 외부에 감추는 기법이다. 객체지향에서는 타입 캡슐화를 지키는 것이 가장 중요하다. 타입 캡슐화는 그래들의 다형성 패턴과 변경 보호 패턴의 관점에서 떠올리면 쉽게 이해가 가능하다.

타입 캡슐화

다형성 패턴을 적용해서 영화가 동일한 메시지를 전송하도록 협력을 통합하고, 변경 보호 패턴을 적용해서 추상화를 이용해 변하는 타입을 숨겼다. 

의존성 역전 원칙

상위 모듈과 하위 모듈 모두 추상화에 의존하도록 코드를 배치하는 원칙. 의존성 역전 원칙은 추상화를 기준으로 타입을 캡슐화하기 위한 기관 구조를 제공한다. 타입을 캡슐화한 후에는 컴파일 타임에 의존하는 추상화를 런타임에 의존해야 하는 구체적인 타입으로 대체할 수 있어야 한다. 

생성자를 통한 의존성 주입

-> 생성자를 통해 외부에서 구체적인 자식 클래스 타입의 인스턴스를 의존성 주입할 수 있도록 설계하였다.

 

상위 모듈과 하위 모듈 모두 추상화에 의존하도록 설계

  • 상위 모듈(Movie)와 구체적인 방법을 결정하는 하위 모듈(AmounDiscountPolicy, PercentDiscountPolicy) 모두 추상화에 의존하도록 개발하였다.

리스코프 치환 원칙

클라이언트 입장에서 서브타입이 슈퍼타입을 대체할 수 있도록 설계하는 원칙. 리스코프 치환 원칙은 타입을 캡슐화할 수 있는 타입계층을 설계하는 위한 원칙이라고도 할 수 있다.

자식 클래스가 부모 클래스를 대체

  • Movie의 입장에서는 AmountDiscountPolicy와 PercentDiscountPolicy는  DiscountPolicy를 대체할 수 있어야 한다.

개방-폐쇄 원칙

새로운 동작을 추가하면서도 기존 코드는 수정하지 않는 원칙. 이 원칙에 따라 작성된 코드는 개방에는 열려 있고, 수정에는 닫혀 있다.

즉, 개방 폐쇄 원칙은 타입 캡슐화를 통해 기존 코드의 수정 없이 타입을 확장할 수 있도록 코드를 배치하는 원칙이다.

기존 코드 수정 없이 기능 확장 가능

  • 메시지와 메서드를 분리하고, 의존성 역전 원칙과 리스코프 치환 원칙을 적용하면, 기존 코드 수정 없이 할인 정책 타입 추가가 가능하다.
728x90