본문 바로가기

분류 전체보기128

오브젝트 09 - 유연한 설계 오브젝트 09 - 유연한 설계 9.4 의존성 역전 원칙 9.4.1 추상화와 의존성 역전 public class Movie { private AmountDiscountPolicy discountPolicy; } 상위 수준 클래스인 Movie가 하위 수준 클래스인 AmountDiscountPolicy에 의존하고 있다. 상위 수준의 클래스가 하위 수준의 클래스에 의존하면 하위 수준의 변경에 의해 상위 수준 클래스가 영향을 받는다. 의존성 방향은 상위에서 하위로 흘러야 한다. 위와 같은 코드는 클래스의 결합도가 높아지고 재사용성과 유연성이 저해된다. Movie와 AmountDiscountPolicy 모두 추상화에 의존하도록 수정해 문제를 해결할 수 있다. 하위 클래스 변경이 상위 클래스에 영향을 주는 것을 방지.. 2024. 3. 25.
오브젝트 07 - 객체 분해 오브젝트 07 - 객체 분해 가장 일반적인 추상화 방법은 한 번에 다뤄야 하는 문제의 크기를 줄이는 것이다. 사람들은 한 번에 해결하기 어려운 커다란 문제에 맞닥뜨릴 경우 해결 가능한 작은 문제로 나누는 경향이 있다. 이렇게 나눠진 문제들 역시 한 번에 해결하기 어려울 정도로 크다면 다시 더 작은 문제로 나눌 수 있다. 이처럼 큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해(decomposition)라고 부른다. 7.1 프로시저 추상화와 데이터 추상화 현대적인 프로그래밍 언어를 특징 짓는 중요한 두가지 추상화 메커니즘은 프로시저 추상화와 데이터 추상화다. 프로시저 추상화는 소프트웨어가 무엇을 해야 하는지를 추상화한다. 데이터 추상화는 소프트웨어가 무엇을 알아야 하는지를 추상화한다. 소프트웨어는 데.. 2024. 3. 5.
오브젝트 06 - 메시지와 인터페이스 06 오브젝트 - 메시지와 인터페이스 훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향해야 한다. 더 정확히는, 협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다. 객체지향 애플리케이션의 가장 중요한 재료는 클래스가 아니라 객체들이 주고받는 메시지다. 6.1 협력과 메시지 6.1.1 클라이언트-서버 모델 협력은 어떤 객체가 다른 객체에게 무언가 요청할 때 시작된다. 객체가 다른 객체에게 접근할 수 있는 유일한 방법은 메시지를 전송하는 것뿐이다. 두 객체 사이의 협력 관계를 설명하기 위해 전통적으로 클라이언트-서버 모델이라는 메타포를 사용한다. 협력안에서 메시지를 전송하는 객체를 클라이언트, 메시지를 수신하는 객체를 서버라고 부른다. 객체는 협력에 참여하는 동안 클라이언트와 서버의 역.. 2024. 2. 26.
오브젝트 05 - 책임 할당하기 오브젝트 05 - 책임 할당하기 5.1 책임 주도 설계를 향해 5.1.1 협력이라는 문맥 안에서 책임을 결정하라 객체에게 할당된 책임이 협력에 어울리지 않는다면 그 책임은 나쁜 것이다. 객체의 입장에서는 책임이 조금 어색해 보이더라도 협력에 적합 하다면 그 책임은 좋은것이다. 협력을 시작하는 주체는 메시지 전송자이기 때문에 좋은 책임이란 메시지 전송자에게 적합한 책임을 의미한다. 메시지를 먼저 결정하면 메시지 수신자에 대한 정보가 없기 때문에 전송자의 관점에서 메시지 수신자가 깔끔하게 캡슐화된다. 5.2 책임 할당을 위한 GRASP 패턴 - 대중적으로 가장 널리 알려진 객체지향 패턴 5.2.1 도메인 개념에서 출발하기 설계를 시작하기 전 도메인에 대한 모습을 대략적으로 그려 보는것은 유용하다. 도메인 개.. 2024. 2. 20.
오브젝트 04 - 설계 품질과 트레이드오프 오브젝트 04 - 설계 품질과 트레이드오프 가끔 좋은 설계보다는 나쁜 설계를 통해 통찰을 얻기도 한다. 특히 좋은 설계와 나쁜 설계를 비교할 때 효과가 좋다. 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이터 중심의 설계를 살펴보고 객체 지향적으로 설계한 구조와 어떤 차이점이 있는지 살펴보자. 4.1 데이터 중심의 영화 예매 시스템 데이터 중심 설계에서 객체는 자신이 포함하고 있는 데이터를 조작하는데 필요한 오퍼레이션을 정의한다. 데이터 중심 설계에서는 객체를 독립된 데이터 덩어리로 바라본다. 상태가 객체 분할의 중심이 되면 구현에 관한 세부사항이 객체의 인터페이스에 스며들게 되어 캡슐화가 무너진다. 결과적으로 상태 변경은 인터페이스의 변경을 초래하여 해당 인터페이스에 의존하는 모든 .. 2024. 2. 19.
오브젝트 03 - 역할, 책임, 협력 오브젝트 03 - 역할, 책임, 협력 3.1 협력 객체지향의 핵심은 역할, 책임, 협력이다. 이를 고민하지 않은 채 구현에 초점을 맞추는 것은 변경하기 어렵고 유연하지 못한 코드를 낳는다. 3.1.1 영화 예매 시스템 돌아보기 객체지향 원칙을 따르는 애플리케이션의 제어 흐름은 하나에 의해 통제되지 않고 다양한 객체들 사이에 균형있게 분배된다. 다양한 객체들은 기능을 구현하기 위해 메시지를 주고 받으며 상호작용하는데 이를 협력이라고 한다. 객체가 협력에 참여하기 위해 수행하는 로직은 책임이라고 한다. 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다. 3.1.2 협력 두 객체 사이의 협력은 하나의 객체가 다른 하나에게 도음울 요청할 때 시작된다. 메시지 전송은 객체 사이의 협력을.. 2024. 2. 13.
728x90
반응형