6장 객체 지향 스타일
포드 어댑터 아키텍처란 무엇인가?
-
비즈니스 도메인의 코드가 데이터베이스나 사용자 인터페이스 같은 기술 기반 구조의 의존성과 격리된 아키텍처
- 포트 : 인터페이스를 작성해 애플리케이션 모델과 외부 세계의 관계를 애플리케이션 모델의 용어로 기술
- 어댑터 (손상 방지 계층) : 애플리케이션의 핵심부와 각 기술 도메인 사이에서 브리지 역할을 하는 코드
- 애플리케이션 모델에서 정의한 인터페이스를 구현하고 애플리케이션 수준의 객체와 기술 수준의 객체를 매핑한다.
- 관심사의 분리 : 시스템의 동작 방식을 변경할 경우, 되도록 적은 양의 코드를 변경 하고자 함. -> 변경 이유가 같은 코드끼리 모은다.
- 더 높은 수준의 추상화 : 복잡성을 다루는 방법. 유용한 기능 컴포넌트를 조합하는 식으로 프로그램 작성.
캡슐화와 정보 은닉
-
캡슐화 : 객체의 행위가 해당 객체의 API를 통해서만 좌우될 수 있음을 보장
- 데이터를 공용 메서드를 통해서만 접근하도록 어용하는 방법
-
정보 은닉 : 객체가 해당 객체의 기능을 구현하는 방법을 추상화된 API 너머로 감추는 것
- 모듈( 책임의 할당 )을 분할하기 위한 기본 원리
- 복잡하고 변경 가능한 설계 결정을 안정적인 인터페이스 뒤로 숨기는 기본 설계 원리
- 코드가 구체적인 것에 의존하는 것을 막음으로써 변경에 대한 유연성을 제공하는 것
-
시스템을 구성할 때는 각 객체의 안팎으로 무엇을 둘지 결정해 해당 객체가 명확한 API와 함께 응집력 있는 추상화를 제공하게 해야 한다.
- API를 통해 해당 객체의 내부에 접근하는 것을 캡슐화하고, 세부 사항을 시스템의 나머지 부분으로부터 감추는 것
단일 책임 원칙
- 특정 객체에게 어울리는 기능을 선택하기 위한 기준(?)
-
모든 객체는 반드시 단 한 가지 명확히 규정된 책임을 지녀야 한다.
- 객체의 역할을 한 절로 설명.
-
여러 객체를 조합해 새로운 추상화를 만드는 데도 적용
- 여러 객체에 걸쳐 구현된 행위를 단일 구성물로 뭉뚱그릴 경우 해당 구성물의 역할을 명확하게 설명할 수 있어야 한다.
- 전체는 부분의 합보다 단순해야 한다.
- 컨텍스트 독립성
전체는 부분의 합보다 단순해야 한다. 의 의미는 무엇인가?
- 복합 객체의 API는 반드시 구성 요소의 존재와 구성 요소 간의 상호 작용을 감추고 더 단순한 추상화를 이웃에게 드러내야 한다.
- 코드 규모가 커짐에 따라 추상화 수준을 높일 수 있는 규칙이 된다.
컨텍스트 독립성이란 무엇인가?
-
컨텍스트 독립적 : 각 객체가 해당 객체를 실행하는 시스템에 관해 아무것도 알지 못한다.
- 컨텍스트 독립성 : 한 객체가 정보를 너무 많이 감췄거나 잘못된 정보를 감췄는지 판단하는 데 유용하다.
- 컨테스트에 대해 독립적이다. 컨텍스트에 대한 정보가 적다 -> 객체가 다양한 컨텍스트에서 재사용 될 수 있다
- ❓❓❓❓예시