도니의 iOS 프로그래밍 세상

[오브젝트 2회독] 14장 - 일관성 있는 협력 본문

OOP

[오브젝트 2회독] 14장 - 일관성 있는 협력

Donee 2024. 11. 19. 19:34
  • 객체는 협력을 위해 존재하며, 협력 구조가 다를경우 코드 이해도가 낮아지고 버그의 위험성이 높아짐
  • 설계 재사용을 위해서 객체들의 협력 방식을 일관성 있게 만들어야 함

1. 설계에 일관성 부여하기

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

캡슐화 다시 살펴보기

  • 캡슐화는 데이터의 은닉만을 의미하는 것이 아닌, 변할수 있는 모든 개념을 감추는 것
  • 협력을 일관성 있게 만들기 위한 두가지 캡슐화의 방법
  • 서브 타입 캡슐화와 객체 캡슐화
    • 서브 타입 캡슐화:
      • 컴파일 타임 때는 슈퍼 타입만 알고 있더라도, 실행 시점에 자식 클래스 인스턴스와 협력함. 서브
      • 서브 타입의 종류를 캡슐화
    • 객체 캡슐화
      • 특정 클래스는 다른 클래스 타입을 private으로 인스턴스 변수로 갖고 있음
      • 이로 인해 객체와 객체 사이에 관계가 캡슐화 되어 두 객체의 관계가 변하더라도 외부에 영향을 미치지 않음
      • 객체 사이의 관계가 캡슐화 됨
  • 서브 타입 캡슐화
    • 변하는 부분을 분리해서 타입 계층으로 만듦.
    • 변하는 부분의 공통적인 행동을 인터페이스로 추상화 하고, 변하는 부분들이 상속 받게 만듦
  • 객체 캡슐화
    • 변하지 않는 부분에 합성하여 특정 객체가 추상화에 의존하도록 만듦

결론

  • 객체 협력 방식을 일관성 있게 만들어서, 기존 설계를 재사용 할 수 있음
  • 이는 버그의 위험성을 낮추고, 코드의 이해도를 높임
  • 설계 일관성을 위해서 변하는 개념과 변하지 않는 개념을 분리하여, 변하는 개념을 캡슐화
  • 캡슐화는 단순 데이터를 감추는 행위를 넘어, 변할수 있는 모든 개념을 감추는 행위
  • 합성과 상속 모두 캡슐화의 일종이며, 객체 사이의 관계를 캡슐화 하는 것과 서브 타입을 캡슐화 하는것으로 나눠짐
  • 약간의 부조화를 수용하더라도, 서비스 내에 일관성 있는 패턴을 지키는게 더 중요
    • 서브 타입중 한곳에서 의도한 동작과 다르게 구현하더라도, 일관성 있는 협력 패턴을 통해 시스템의 이해도를 높이고, 수정에 필요한 노력을 낮출 수 있음
Comments