소프트웨어의 모듈의 3가지 목적제대로 실행되어야 한다.변경이 용이해야 한다.이해하기 쉬어야 한다.이해 가능한 코드란 동작이 예상에서 크게 벗어나지 않는 코드관램객과 판매원이 극장의 통제를 받는다 → 예상에서 벗어남관람객(Audience)과 판매원(TicketSeller
객체지향 패러다임으로의 전환은 객체에 초점을 맞출 때에만 얻을 수 있다.어떤 객체가 필요한지 고민할 것객체는 협력하는 공동체의 일원으로 볼 것 → 설계를 유연하고 확장 가능하게 만든다.도메인문제를 해결하기 위해 사용자가 프로그램을 사용하는 분야클래스의 내부와 외부를 구
객체지향 패러다임의 관점에서 핵심은 역할(role), 책임(responsbility), 협력(collaboration)
객체 지향 설계의 핵심 - 역할, 책임, 협력협력 - 객체들의 상호작용책임 - 협력하기 위해 수행하는 행동역할 - 대체 가능한 책임의 집합(가중 중요)객체지향 설계의 핵심이 책임책임을 할당하는 작업이 응집도와 설계 품질과 깊이 연관객체에 행동에 초점을 맞춤으로서 결합도
책임에 초점을 두자 어떤 객체에게 어떤 책임을 할당할 것인가GRASP 패턴데이터는 객체가 책임을 수행하는 데 필요한 재료를 제공행동을 결정한 후에 데이터를 결정해야 한다 .협력에 적합한 책임 = 메시지 전송자에게 적합한 책임메시지가 객체를 선택하게 해야 한다."메시지를
좋은 객체지향 코드를 얻기 위해서 → 객체를 지향객체가 수행하는 책임에 초점을 맞춰야 한다.애플리케이션은 클래스로 구성되지만 메시지를 통해 정의된다.따라서 가장 중요한 것은 메시지다.클라이언트-서버 모델메시지를 전송하는 객체를 클라이언트메시지를 수신하는 객체를 서버메시
추상화 : 불피룡한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업분해 : 큰 문제를 해결 가능한 작은 문제로 나누는 작업프로시저 추상화소프트웨어가 무엇을 해야 하는지를 추상화한다.기능 분해(알고리즘 분해)데이터 추상화소프트웨어가 무엇을 알아야 하는지를
작고 응집도 높은 객체 한 가지 일만 잘 하는 객체 기능을 구현은 객체들간의 협력을 통해서 이루어진다. 설계의 핵심은 필요한 의존성은 유지하되 변경을 방해하는 의존성은 제거 01 의존성 이해하기 변경과 의존성 의존성 실행 시점: 실행 시에 의존 대상 객체가 반
확장에 열려 있으며 수정에 닫혀 있다.기존의 코드를 수정하지 않고도 애플리케이션의 동작을 확장할 수 있는 설계컴파일 의존성을 수정하지 않고도 런타임 의존성을 쉽게 변경할 수 있다.추상화에 의존하라!추상화핵심적인 부분만 남기고 불필요한 부분은 생략생략된 부분을 문맥에 적
합성새로운 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법중복 코드는 변경을 방해한다.일단 중복 코드의 묶음을 찾았다면 찾아낸 모든 코드를 일관되게 수정해야 한다.중복 여부를 판단하는 기준은 변경이다.함께 수정할 필요가 없다면 중복이 아니다.DRY(Do
상속과 합성은 재사용 기법상속 관계(is-a 관계)합성 관계(has-a 관계)합성을 이용하면 좀 더 안정적인 코드를 얻을 수 있다.합성 관계는 실행 시점에 동적으로 변경될 수 있기 때문이다.코드 재사용을 위해서 객체 합성이 클래스 상속보다 더 좋은 방법이다.합성은 포함
상속의 목적은 코드 재사용이 아니다. 상속은 타입 계층을 구조화하기 위해 사용한다.단순히 코드를 재사용하기 위함이라면 상속을 사용해서는 안된다.다형성이 런타임에 메시지를 처리하기에 적합한 메서드를 동적으로 탐색하는 과정으로 통해 구현된다.상속은 이런 메서드를 찾기 위해
상속의 첫 번째 용도는 타입 계층을 구현하는 것이다.상속의 두 번째 용도는 코드 재사용이다.타입 계층을 목표로 상속을 사용하면 확장 가능하고 유연한 설계를 얻을 수 있다.객체들에 적용하는 개념이나 아이디어를 가리켜 타입타입의 인스턴스 = 객체타입의 구성 요소심볼: 타입
객체는 협력을 위해 존재객체지향 설계의 목표는 협력을 기반으로 결합도가 낮고 재사용 가능한 코드 구조를 창조하는 것일관서 있는 협력 패턴을 적용하면 코드가 이해하기 쉽고 직관적이며 유연해진다비일관성의 문제점새로운 구현을 추가하면 추가할 수록 비일관성이 심해진다.코드를
디자인 패턴소프트웨어 설계에서 반복적으로 발생하는 무제에 대해 반복적으로 적용할 수 있는 해결방법협력을 일관성 있게 만들기 위해 재사용할 수 있는 설계의 묶음프레임워크설계와 코드를 함께 재사용하기 위한 것일관성 있는 협력을 제공하는 확장 가능한 코드패턴의 핵심적인 특징
계약에 의한 설계 라이브러리(Code Contracts)를 이용하여 메서드의 순서와 관련된 제약을 명확하게 표현할 수 있다.한쪽의 의무가 반대쪽의 권리가 된다계약의 내용을 위반한다면 계약은 정상적으로 완료되지 않는다.협력에 참여하는 각 객체는 계약으로부터 이익을 기대하
타입은 개념의 분류클래스는 타입을 구현하는 한 가지 방법상속은 자식 클래스를 부모 클래스의 구현에 강하게 결합시키기 때문에 구체 클래스를 상속받는 것은 피해야 한다.가급적 추상 클래스를 상속받거나 인터페이스를 구현하는 방법을 사용해야 한다.상속으로 인한 결합도 문제와
동적 모델프로그램의 실행 구조를 표현하는 움직이는 모델정적 모델코드의 구조를 담는 고정된 모델정적 모델은 동적 모델에 의해 주도돼야 하며 동적 모델이라는 토대 위에 세워져야 한다.정적 모델은 객체 사이의 협력에 기반해야 한다.행동이 객체의 정적 모델을 결정해야 한다.가