이 포스팅은 오브젝트(조영호)를 읽으면서 정리한 글입니다

객체지향 설계
서로 협력하고 의존하는 객체들의 공동체를 구성하는 과정.
불필요한 의존성을 제거하고, 최소한의 의존성만 유지하여 유연하고 확장 가능한 시스템을 만들자.
객체지향 프로그래밍
데이터와 프로세스(행위)가 하나의 객체(모듈) 안에 함께 존재하도록 구성하는 프로그래밍 방식.
→ 즉, 데이터와 해당 데이터를 다루는 로직이 같은 객체 안에 캡슐화된다.
객체지향 설계 요소
협력
시스템 기능을 구현하기 위해 객체들이 메시지를 주고받으며 상호작용하는 과정
역할
객체가 협력 안에서 수행해야 할 책임의 집합.
→ 동일한 역할을 여러 객체가 구현할 수 있음 (인터페이스 기반 설계)
책임
객체가 수행해야 할 행동(로직) 또는 데이터 관리의 의무
→ 객체는 자신의 역할에 맞는 책임을 수행함으로써 협력에 기여한다.
책임 할당하기 – 책임 주도 설계(Responsibility-Driven Design)
책임 주도 설계의 단계
- 시스템이 제공해야 하는 기능(책임)을 파악한다.
- 각 기능을 작은 책임 단위로 분해한다.
- 책임을 수행할 수 있는 객체 또는 역할을 식별한다.
- 책임 수행을 위해 다른 객체의 도움이 필요할 경우, 협력할 객체를 찾는다.
GRASP 패턴 (General Responsibility Assignment Software Patterns)
책임을 적절히 할당하기 위한 객체지향 설계 패턴
주요 질문
- 전송할 객체는 무엇을 원하는가
- 수신에 적합한 객체는 누구인가
낮은 결합도 (LOW-DECOUPLING)
객체 간 연결을 최소화하여 변경에 대한 영향을 줄이는 설계.
예약 ➡️`screening` ➡️ 계산 ➡️ `movie` ➡️ 할인 적용 ➡️ `discountPolicy`
`screening`이 직접 `discountPolicy`에 직접적으로 결합되지 않는다.
높은 응집도 패턴(HIGH COHESION)
하나의 객체가 하나의 명확한 책임에 집중하도록 설계.
예약 ➡️`screening` ➡️ 계산 ➡️ `movie` ➡️ 할인 적용 ➡️ `discountPolicy`
- `movie`는 계산에 대한 책임만 가짐
- `screening`은 예매 생성 책임만을 가진다.
CREATOR 패턴
객체 생성 책임을 가장 잘 알고, 가장 많이 사용하는 객체에게 부여.
➡️ 만약 클래스 A가 클래스 B에 대해 잘 알고 자주 교류한다면 A에게 B의 생성을 맡기자
POLYMOTPHISM(다형성) 패턴
조건문으로 동작을 구분하지 않고, 다형성을 이용해 객체가 스스로의 동작을 결정하도록 한다.
인터페이스 또는 상속을 기반으로 유연하고 확장 가능한 구조를 구현한다.
PROTECTED VARAIATIONS 패턴
변화 가능성이 높은 설계 요소는 외부에 직접 노출하지 않고, 인터페이스나 추상화 계층 뒤에 감춰서 캡슐화한다.
➡️ 변화로부터 나머지 시스템을 보호할 수 있다.
'Book > DEV' 카테고리의 다른 글
| 오브젝트 (3) (0) | 2025.04.09 |
|---|---|
| 오브젝트 (2) (0) | 2025.04.08 |
| 만들면서 배우는 클린 아키텍쳐 (2) (0) | 2025.03.14 |
| 만들면서 배우는 클린 아키텍쳐 (1) | 2024.12.11 |
| Effective Java - 상속과 합성 (0) | 2022.11.28 |