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

이전 포스팅
오브젝트 (1)
오브젝트 (2)
객체 분해하기
추상화
프로시저 추상화
- "소프트웨어가 무엇을 해야 하는지"
- 기능 분해 (알고리즘분해)
데이터 추상화
- "소프트웨어가 무엇을 알아야 하는지"
데이터 중심 타입 추상화(type abstraction), 데이터 중심 프로시저 추상화(procedure abstraction) - 프로그래밍 언어 관점의 객체지향이라고 볼 수 있음
- 데이터 중심 데이터 추상화, 프로시저 추상화 통합 객체를 사용하여 시스템을 분해.
- 이 때 클래스를 사용한다.
기능 분해
기능을 중심으로 데이터를 결정한다.
top-down(하향식) 접근 - 기능분해의 전통 방식
Top-down example)
직원정보입력 → 소득세율 가져오기 → 급여계산
위처럼 실행순서가 고정되므로 유연성 • 재사용성이 감소한다
즉 하향식 설계는 context에 강결합되기 때문에 재사용이 어렵다
사용자 인터페이스 : 변경이 많음
비즈니스 로직 : 사용자 인터페이스에 비해 변경이 적음
반면에 객체지향은 객체 사이의 논리적인 관계를 중심으로 설계되므로 제어 주체가 분산된다.
모듈
- 함께 변경되는 부분을 구현단위도 묶고 인터페이스를 통해서만 접근되어 캡슐화 / 은닉 가능
- 모듈 내부가 변경 되더라도 내부에만 영향을 미친다
- 비즈니스로직과 사용자 인터페이스 관심사분리
- 전역 변수 함수를 제거함으로써 네임스페이스 오염방지
유연한 설계
OCP (개방-폐쇄 법칙)
소프트웨어 객체(클래스, 모듈, 함수)는 확장에 열려 있고, 수정에 닫혀 있어야 한다
유연한 설계의 핵심은 추상화에 의존한다는 점이다.
추상화
추상화 : 확장을 가능케 한다.
추상화의 의존: 폐쇄를 가능하게 함
컴파일 시점 : 의존성 고정
런타임 시점 : 의존성 변경
생성 사용 분리
객체 생성 지식이 과도한 결합도 초래
객체의 생성은 객체 생성 책임을 클라이언트에 옮기는 것
ex. 한 영화의 할인 정책은 영화를 생성할 클라이언트의 몫
Factory
- 생성 • 사용을 분리하기 위해 객체 생성에 대한 책임을 전담하는 객체
- 팩토리는 순수한 기술적인 객체이고, 도메인 모델에 속하지 않는다
표현적 분해
- 도메인모델의 개념
- 관계를 따르며 도메인 (소프트웨이 사이의 표현적 차이를 최소화)
- 그러나 모든 책임을 도메인모델에 위임한다면, 낮은 응집도, 높은 결합도, 재사용성 저하가 발생할 수 있다.
행위적 분해
- Pure fabrication(순수한 가공물)을 추가하고, 책임을 할당하자
- Factory가 이에 속함
- 시스템은 임의적으로 창조한 인공적인 추상화를 포함하며, 오히려 표면적 분해보다 더 많은 비중을 차지하기도 한다.
주의 사항
- 유연한 설계는 유연성이 필요할 때만 옳다
- 불필요한 유연성은 불필요한 복잡성을 낳는다.
- Tip) 인스턴스의 생성에 대해서는 추후에 고민하자.
'Book > DEV' 카테고리의 다른 글
| 오브젝트 (4) (1) | 2025.04.16 |
|---|---|
| 오브젝트 (2) (0) | 2025.04.08 |
| 오브젝트 (1) (1) | 2025.04.01 |
| 만들면서 배우는 클린 아키텍쳐 (2) (0) | 2025.03.14 |
| 만들면서 배우는 클린 아키텍쳐 (1) | 2024.12.11 |