
소프트웨어 개발에서 실무가 이론보다 앞서 있는 대표적인 분야로 '소프트웨어 설계'와 '소프트웨어 유지보수'를 들 수 있다. 컴퓨터라는 도구가 세상에 출현한 이후 지금까지 셀 수 없을 정도로 많은 수의 소프트웨어가 설계되고 개발돼 왔다. 따라서 실무는 훌륭한 소프트웨어

이번 장에서 소개할 예제는 온라인 예매 시스템이다.'영화'와 '상영'이라는 용어를 구분할 필요가 있을 것 같다.'영화'는 영화에 대한 기본 정보를 표현한다. 제목, 상영시간, 가격 정보와 같이 영화가 가지고 있는 기본적인 정보를 가리킬 때 사용할 것이다.'상영'은 실제

사용자가 영화 예매 시스템을 통해 영화를 예매할 수 있게 하려면 다양한 객체들이 참여하는 협력을 구축해야 한다. 그림 3.1은 영화 예매라는 기능을 완성하기 위해 협력하는 객체들의 상호작용을 표현한 것이다.객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을

객체지향 설계의 핵심은 역할, 책임, 협력이다. 협력은 애플리케이션의 기능을 구현하기 위해 메시지를 주고받는 객체들 사이의 상호작용이다. 책임은 객체가 다른 객체와 협력하기 위해 수행하는 행동이고, 역할은 대체 가능한 책임의 집합이다.이번 장에서는 영화 예매 시스템을

이번 장에서 살펴볼 GRASP 패턴은 책임 할당의 어려움을 해결하기 위한 답을 제시해줄 것이다.데이터 중심 설계에서 책임 중심의 설계로 전환하기 위해 다음 두 가지 원칙을 따라야 한다.데이터 보다는 행동을 먼저 결정하라협력이라는 문맥 안에서 책임을 결정하라책임 중심 설

객체지향 프로그래밍에 대한 가장 흔한 오해는 애플리케이션이 클래스의 집합으로 구성된다는 것이다.훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향해야 한다.두 객체 사이의 협력 관계를 설명하기 위해 사용하는 전통적인 메타포는 클라이언트-서버 모델이다메시지

불필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업을 추상화라고 부른다.큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해라고 부른다.현대적인 프로그래밍 언어를 특징 짓는 중요한 두 가지 추상화 메커니즘은 프로시저 추상화와 데이터 추상화다. 프로

잘 설계된 객체지향 애플리케이션은 작고 응집도 높은 객체들로 구성된다. 작고 응집도 높은 객체란 책임의 초점이 명확하고 한 가지 일만 잘 하는 객체를 의미한다.객체지향 설계의 핵심은 협력을 위해 필요한 의존성은 유지하면서도 변경을 방해하는 의존성은 제거하는데 있다. 이

01. 개방-폐쇄 원칙 로버트 마틴은 확장 가능하고 변화에 유연하게 대응할 수 있는 설계를 만들 수 있는 원칙 중 하나로 개방-폐쇄 원칙을 고안했다. > 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.

객체지향 프로그래밍의 장점 중 하나는 코드를 재사용하기가 용이하다는 것이다. 이번 장에서는 클래스를 재사용하기 위해 새로운 클래스를 추가하는 가장 대표적인 기법인 상속에 관해 살펴보도록 한다. 01. 상속과 중복 코드 중복 코드는 우리를 주저하게 만들뿐만 아니라

합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용한다.상속에서 부모 클래스와 자식 클래스 사이의 의존성은 컴파일타임에 해결되지만 합성에서 두 객체의 사이의 의존성은 런타임에 해결된다.상속 관계 is - a 관계라 부르고 합성 관계

상속의 목적은 코드 재사용이 아니다. 상속은 타입 계층을 구조화하기 위해 사용해야 한다.다형성은 컴퓨터 과학에서는 다형성을 하나의 추상 인터페이스에 대해 코드를 작성하고 이 추상 인터페이스에 대해 서로 다른 구현을 연결할 수 있는 능력으로 정의한다. 간단하게 말해서 다

상속의 첫 번째 용도는 타입 계층을 구현하는 것이다. 타입 계층 안에서 부모 클래스는 일반적인 개념을 구현하고 자식 클래스는 특수한 개념을 구현한다. 타입 계층의 관점에서 부모 클래스는 자식 클래스의 일반화이고 자식 클래스는 부모 클래스의 특수화다.상속의 두 번째 용도

객체는 협력을 위해 존재한다.객체지향의 장점은 설계를 재사용할 수 있다는 것이다. 재사용을 위해선 객체들의 협력 방식을 일관성 있게 만들어야 한다.일관성 있는 협력 패턴을 적용하면 코드가 이해하기 쉽고 직관적이며 유연해진다는 것이 이번 장의 주제다.11장에서 구현한 핸

소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법을 디자인 패턴이라고 부른다. 디자인 패턴의 목적은 설계를 재사용하는 것이다.디자인 패턴은 다양한 변경을 다루기 위해 반복적으로 재사용할 수 있는 설계의 묶음이다.디자인 패턴이 설계