목록자바 (65)
개발자는 기록이 답이다
객체지향 설계의 핵심은 역할,책임,협력이다. 협력은 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용이고, 책임은 객체가 다른 객체와 협력하기 위해 수행하는 행동이고, 역할은 대체 가능한 책임의 집합이다. 책임 주도 설계라는 이름에서 알 수 있는 것처럼 가장 중요한 것은 '책임'이다. 객체들이 수행할 책임이 적절하게 할당되지 못한 상황에서는 원활한 협력도 기대할 수 없을 것이다. 역할도 책임의 집합이기 때문에 책임이 적절하지 못하면 역할 역시 협력과 조화를 이루지 못한다. 결국 책임이 객체 지향 애플리케이션의 전체 품질을 결정한다. 🚩 객체지향 설계란? 객체에게 올바른 책임을 할당하며, 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다. 책임을 할당하는 작업은 응집도와..
3. 역할 역할과 협력 객체는 협력이라는 주어진 문맥안에서 특정한 목적을 갖게 되고, 객체의 목적은 협력 안에서 객체가 맡게 되는 책임의 집합으로 표시된다. 이처럼 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 부른다. 영화예매 협력에서 "예매하라"라는 메시지를 처리하기에 적합한 객체로 Screening을 선택했다. 하나의 단계처럼 보이는 이 책임 할당 과정은 실제로 두 개의 독립적인 단계가 합쳐진 것이다. 1. 영화를 예매할 수 있는 적절한 역할이 무엇인가 찾는다 2. 역할을 수행할 객체로 Screening 인스턴스를 선택한다 역할에 특별한 이름을 부여하지 않았지만 실제로는 익명의 역할을 찾고 그 역할을 수행할 수 있는 객체를 선택하는 방식으로 설계가 진행된 것이다. Screenin..
2장에서는 클래스, 추상 클래스, 인터페이스를 조합해서 객체 지향 프로그램을 구조화하는 기본적인 방법과 상속을 이용해 다형성을 구현하는 기법을 소개했다. 다형성이 지연 바인딩이라는 매커니즘을 통해 구현된다는 사실도 설명했고, 상속은 코드를 재사용할 수 있는 가장 널리 알려진 방법이지만 캡슐화의 측면에서 합성이 더 좋은 방법이라는 사실을 이해했다. 또한, 유연한 객체지향 프로그램을 위해서는 컴파일 시간 의존성과 실행 시간 의존성이 달라야 한다는 사실 역시 알게 됐다. 객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration)이다. 클래스, 상속, 지연바인딩이 중요하지 않은것은 아니지만 구현 측면에 치우쳐 있으며 객체지향 패러다임의 본질과 거리가..
4. 상속과 다형성 Movie클래스 어디에서도 할인 정책이 금액인지 비율인지 판단하지 않는다. Movie 내부에 할인 정책을 결정하는 조건문이 없음에도 어떻게 영화 요금을 계산할 때 할인 정책을 선택할 수 있었을까? public class Movie { private String title; private Duration runningTime; private Money fee; private DiscountPolicy discountPolicy; // 금액할인? 비율할인? public Movie(String title, Duration runningTime, Money fee, DiscountPolicy discountPolicy) { this.title = title; this.runningTime =..