14장 일관성 있는 협력

swucs·2022년 2월 17일
0

오브젝트

목록 보기
13/13

출처 : 오브젝트 (조영호 저)

재사용을 위해서는 객체들의 협력 방식을 일관성 있게 만들어야 한다. 일관성 있는 설계가 가져다 주는 더 큰 이익은 코드가 이해하기 쉬워진다는 것이다.

유사한 기능을 서로 다른 방식으로 구현해서는 안된다. 객체지향에서 기능을 구현하는 유일한 방법은 객체 사이의 협력을 만드는 것 뿐이므로 유지보수 가능한 시스템을 구축하는 첫걸음은 협력을 일관성 있게 만드는 것이다.

협력을 일관성 있게 만들기 위해 다음과 같은 기본 지침을 따르는 것이 도움이 될 것이다.

  • 변하는 개념을 변하지 않는 개념으로부터 분리하라.
  • 변하는 개념을 캡슐화하라

애플리케이션에서 달라지는 부분을 찾아내고 달라지지 않는 부분으로 부터 분리시킨다. 이것은 여러 설계 원칙 중에서 첫번째 원칙이다. 즉, 코드에서 새로운 요구사항이 있을 때마다 바뀌는 부분이 있다면 그 행동을 바뀌지 않는 다른 부분으로부터 골라내서 분리해야 한다는 것을 알 수 있다. 이 원칙은 다음과 같은 식으로 생각할 수도 있다.
"바뀌는 부분을 따로 뽑아서 캡슐화한다. 그렇게 하면 나중에 바뀌지 않는 부분에는 영향을 미치지 않은 채로 그 부분만 고치거나 확장할 수 있다."

큰 메서드 안에 뭉쳐있던 조건 로직들을 변경의 압력에 맞춰 작은 클래스들로 분리하고 나면 인스턴스들 사이의 협력 패턴에 일관성을 부여하기가 더 쉬워진다. 유사한 행동을 수행하는 작은 클래스들이 자연스럽게 역할이라는 추상화로 묶이게 되고 역할 사이에서 이뤄지는 협력 방식이 전체 설계의 일관성을 유지할 수 있게 이끌어주기 때문이다.

변경에 초점을 맞추고 캡슐화의 관점에서 설계를 바라보면 일관성 있는 협력 패턴을 얻을 수 있다.

구성 요소를 캡슐화하는 실행 지침은 객체지향의 핵심 덕목 중 하나다. 이 실행 지침이 드러나는 또 다른 주제가 패턴이다. GOF에 의하면 인터페이스에 대해 설계해야 한다고 조언하는데, 이것은 결합도가 느슨해질 수 있도록 엔티티 사이의 관계가 추상적인 수준에서 정해져야 한다는 사실을 다르게 표현한 것이다.

GOF의 조언에 따르면 캡슐화란 단순히 데이터를 감추는 것이 아니라 소프트웨어 안에서 변할 수 있는 모든 '개념'을 감추는 것이다.

캡슐화의 종류

  1. 데이터 캡슐화 : 클래스 내부 데이터를 캡슐화
  2. 메서드 캡슐화 : 클래스 내부 행동을 캡슐화
  3. 객체 캡슐화 : 객체와 객체 사이의 관계를 캡슐화. 즉 합성을 의미
  4. 서브타입 캡슐화 : 서브타입의 종류를 캡슐화. 다형성의 기반

서브타입 캡슐화는 인터페이스 상속을 사용하고, 객체 캡슐화는 합성을 사용한다.

서브타입 캡슐화와 객체 캡슐화 방법

  1. 변하는 부분을 분리해서 타입 계층을 만든다.
  • 변하는 부분들의 공통적인 추상 클래스나 인터페이스로 추상화한 후 변하는 부분들이 이 추상 클래스나 인터페이스를 상속받게 만든다.
  1. 변하지 않는 부분의 일부로 타입계층을 합성한다.
  • 1번에서 구현한 타입 계층을 변하지 않는 부분에 합성한다. 변하지 않는 부분에서는 변경되는 구체적인 사항에 결합되서는 안되고, 오직 추상화에만 의존하게 만든다.
profile
백엔드 개발자

0개의 댓글

관련 채용 정보