본문 바로가기
반응형
SMALL

오브젝트9

08 의존성 관리하기 잘 설계된 객체지향 애플리케이션은 작고 응집도 높은 객체들로 구성된다. 작고 응집도 높은 객체란 책임의 초점이 명확하고 한 가지 일만 잘 하는 객체를 의미한다. 01. 의존성 이해하기 변경과 의존성 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재하게 된다. 의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가진다. * 실행 시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다. * 구현 시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경된다. 영화 예매 시스템의 PeriodCondition 클래스를 이용해 의존성의 개념을 설명하기로 한다. PeriodCondition 클래스의 isSatisfiedBy 메서드.. 2023. 8. 28.
07 객체 분해 * 장기 기억: 경험한 내용을 수개월에서 길게는 평생에 걸쳐 보관하는 저장소를 의미한다. * 단기 기억: 보관돼 있는 지식에 직접 접근할 수 있지만 정보를 보관할 수 있는 속도와 공간적인 측면 모두에서 제약을 받는다. * 인지 과부화: 문제 해결에 필요한 요소의 수가 단기 기억의 용량을 초과하는 순간 문제 해결 능력은 급격하게 떨어지고 만다. * 인지 과부하 방지 : 단기 기억 안에 보관할 정보의 양을 조절하는 것 * 인류가 복잡한 분야(소프트웨어 개발 영역)의 문제를 해결하기 위해 사용한 것 * 추상화 : 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업. 즉, 한 번에 다뤄야 하는 문제의 크기를 줄이는 것 -> 한 번에 단기 기억에 담을 수 있는 추상화의 수에는 한계가 있지만 추.. 2023. 8. 21.
06 메시지와 인터페이스 훌륭한 객체지향을 위해서는 클래스가 아닌 객체를 지향해야 한다. 협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다. 책임은 객체가 수신할 수 있는 메시지의 기반이 된다. 객체지향 애플리케이션의 가장 중요한 재료는 객체들이 주고받는 메시지다. 매시지들이 객체의 퍼블리 인터페이스를 구성한다. 1. 협력과 메시지 클라이언트-서버 모델 클라이언트: 메시지를 전송하는 객체 Screening은 '가격을 계산하라' 메시지를 전송함으로써 도움 요청 Movie는 '할인 요금을 계산하라' 메시지를 전송함으로써 도움 요청 서버: 메시지를 수신하는 객체 Movie는 가격을 계산하는 서비스를 제공함으로써 메시지에 응답 DiscountPolicy는 할인 요금을 계산하는 서비스를 제공함으로써 메시지에 응답 협력: 클라이언트가.. 2023. 8. 18.
05 책임 할당하기_02 다형성을 통해 분리하기 할인 가능 여부를 반환해 주기만 하면 Movie는 객체가 sequenceCondition의 인스턴스인지, periodCondition의 인스턴스인지는 상관하지 않는다. 이 시점이 되면 자연스럽게 역할의 개념이 무대 위로 등장한다. Movie의 입장에서 sequenceCondition과 periodCondition이 동일한 책임을 수행한다는 것은 동일한 역할을 수행한다는 것을 의미한다. 역할을 사용하면 객체의 구체적인 타입을 추상화할 수 있다. 자바에서는 일반적으로 역할을 구현하기 위해 추상 클래스나 인터페이스를 사용한다. 역할을 대체할 클래스들 사이에서 구현을 공유해야 할 필요가 있다면 추상 클래스를 사용하면 된다. 구현을 공유할 필요 없이 역할을 대체하는 객체들의 책임만 정의하고.. 2023. 8. 9.
05 책임 할당하기_01 데이터 중심 설게로 인해 발생하는 문제점을 해결할 수 있는 가장 기본적인 방법은 데이터가 아닌 책임에 초점을 맞추는 것이다. 책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다. GRASP 패턴을 이해하고 나면 응집도와 결합도, 캡슐화 같은 다양한 기준에 따라 책임을 할당하고 결과를 트레이오프할 수 있는 기준을 배우게 될 것이다. 01 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해서는 다음의 두 가지 원칙을 따라야 한다. 1) 데이터보다 행동을 먼저 결정해라 2) 협력이라는 문맥 안에서 책임을 결정해라 데이터보다 행동을 먼저 결정하라 객체를 설계하기 위한 질문의 순서를 바꿔라 데이터 중심의 설계에.. 2023. 8. 7.
04 설계 품질과 트레이드 오프 객체지향 설계의 핵심은 역할, 책임, 협력이다. 협력: 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용이다. 책임: 객체가 다른 객체와 협력하기 위해 수행하는 행동 역할: 대체 가능한 책임의 집합이다. 이 중에서도 가장 중요한 것이 '책임'이다. 책임은 객체지향 애플리케이션의 품질을 결정한다. 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 것이다. 즉, 객체지향 설계의 핵심이 책임이고 책임을 할당하는 과정이 응집도, 결합도와 연관되어있다. 설계라는 것은 변경을 위해 존재하고 변경 시에는 반드시 비용이 발생한다. 훌륭한 설계란 적절한 비용 안에서 쉽게 변경할 수 있는 응집도가 높고 서로 느슨하게 결합된 요소로 구성된 .. 2023. 7. 31.
반응형
LIST