1장. 위대한 소프트웨어는 여기에서 시작된다
락앤롤은 영원하다!
릭의 빛나는 새 프로그램...
여러분이라면 무엇을 먼저 바꾸겠습니까?
위대한 소프트웨어는...
쉬운 3단계로 위대한 소프트웨어 만들기
우선 기능에 중점을 두세요
테스트 구동
문제점 찾아보기
분석
객체지향의 기본 원리 적용
설계 한 번하고, 설계 두 번하고
여러분의 프로그램을 수정하는 것이 어느 정도 쉬운가요?
변하는 것을 캡슐화하세요
위임
위대한 소프트웨어(지금에는)
OOA&D는 위대한 소프트웨어를 작성하는 방법에 관한 것입니다
핵심 정리
2장. 그들에게 원하는 것을 주세요
새로운 프로그래밍 일이 생겼습니다
테스트 구동
잘못된 사용(일종의)
요구 사항이 무엇입니까?
요구 사항 리스트 만들기
문제 발생에 대한 계획안
시스템의 문제는 대체 경로가 해결
유스케이스를 소개합니다
하나의 유스케이스, 세 가지 부분
유스케이스를 가지고 요구 사항 체크하기
여러분의 시스템은 실제 상황에서 동작해야 합니다
행복한 경로 알아보기
OOA&D 도구 상자
3장. 당신을 사랑해요. 당신은 완벽해... 그런데 이건 좀 바꿨으면
당신은 나의 영웅입니다!
당신은 바보입니다!
소프트웨어 분석과 설계에서 변하지 않는 한 가지
선택 경로? 대체 경로? 구별이 어려워요!
유스케이스는 여러분이 이해하기 쉬워야 합니다
시작부터 끝: 하나의 시나리오
대체 경로의 고백
요구 사항 리스트 끝내기
중복 코드는 나쁜 생각입니다
마지막 테스트 구동
여러분 스스로의 디자인 원리를 쓰세요
OOA&D 도구 상자
4장. 여러분의 소프트웨어를 실제 세상으로...
강아지 한 마리, 강아지 두 마리, 강아지 세 마리, 네 마리
프로그램은 동작 환경이 있습니다
문제 찾기
해결 방안의 계획
두 프로그래머의 이야기
위임으로 우회
느슨하게 결합된 프로그램의 힘
유스케이스에서 명사들에 주의를 기울이세요
분석을 잘해서 적당한 클래스 찾기
클래스 다이어그램의 분해
클래스 다이어그램이 전부는 아닙니다
핵심 정리
5장. (part1) 변하지 않는 것은 없다
릭의 기타는 번창하고 있습니다
추상 클래스
클래스 다이어그램 분석(다시)
UML 컨닝 페이퍼
디자인 문제 경고
위대한 소프트웨어로 향하는 3단계(예전에 한 내용)
(막간) 객체 지향 대참사!
(part2) 여러분의 소프트웨어를 운동시켜서 튼튼하게 만드세요
릭의 검색 도구로 다시 돌아가서
search() 메쏘드 자세히 살펴보기
분석을 통해 얻은 것
클래스들을 행동(behavior)에 관한 것입니다
디자인 (결정)의 죽음
잘못 내린 디자인 결정을 바꾸세요
릭 프로그램에서의 "이중 캡슐화"
실수하는 것을 두려워하지 마세요
릭의 유연한 프로그램
잘 디자인된 릭의 프로그램 시험 구동
릭의 소프트웨어를 변경하는 것이 얼마나 쉬운가요?
위대한 변경 용이성 문제
응집된 클래스는 하나의 일을 정말 잘합니다
디자인/응집도 생명 주기
위대한 소프트웨어는 "충분히 좋습니다"
OOA&D 도구 상자
6장. "내 이름은 아트 반델리... 나는 건축가예요"
큰 문제 해결하기
큰 문제를 어떻게 바라보는 가에 해답이 있습니다
요구 사항과 유스케이스로 시작하는 것도 좋습니다
공통점과 차별성
특징들 찾아 내기
특징과 요구 사항의 차이점
유스케이스는 개발 시스템 전체의 큰 그림을 보는 데 항상 도움이
되지는 않습니다
유스케이스 다이어그램
작은 액터
액터들도 사람입니다. (항상 그렇지는 않지만)
도메인 분석을 좀 해 봅시다
나눠서 정복하기
고객이 정말 누구인지 잊지 마세요
디자인 패턴이 뭐죠?
OOA&D(와 약간의 상식)의 힘
OOA&D 도구 상자
7장. 혼란스러운 세상에 질서를
어떻게 할지 좀 막막하죠?
우리는 아키텍처가 필요합니다
기능부터 시작합시다
무엇이 아키텍처적으로 중요합니까?
아키텍처에 관한 세 가지 질문
위험 줄이기
시나리오들이 위험요소를 줄이는 데 도움이 됩니다
한 번에 하나의 특징에 집중하세요
아키텍처는 디자인의 구조입니다
공통점 다시 보기
공통점 분석
무슨 뜻이죠? 고객에게 물어보라니
위험을 줄이는 것이 위대한 소프트웨어를 만드는 데 도움이 됩니다
핵심 정리
8장. 독창적인 디자인은 정도껏
디자인 원리 정리
개방-폐쇄의 원리(Open-Closed Principle, OCP)
OCP를 단계적으로 살펴보기
반복 금지의 원리(Don"t Repeat Yourself Principle-DRY)
DRY는 하나의 요구 사항은 한 곳에 두어야 한다는 원리입니다
단일 책임의 원리(Single Responsibility Principle, SRP)
여러 개의 책임을 찾아내기
여러 개의 책임들을 하나의 책임으로 바꾸기
리스코프 치환 원리(LSP)
잘못된 상속 사용: 사례 연구
LSP는 여러분이 설계한 상속 구조의 숨겨진 문제점을 찾아 줍니다.
자식 타입은 부모 타입이 사용되는 곳에 대체되어 사용될 수 있어야 합니다
LSP를 위반하면 혼란스러운 코드가 됩니다
다른 클래스에 기능을 위임(Delegation)하기
구성(Composition)을 사용해서 다른 클래스들의 행동을 조합하기
집합(Aggregation): 갑자기 사라지지 않는 구성(Composition)
집합 (Aggregation) 대 구성(Composition)
상속은 선택 사항 중 하나일 뿐
핵심 정리
OOA&D 도구 상자
9장. 소프트웨어는 여전히 고객을 위한 것입니다.
여러분의 도구 상자는 채워지고 있습니다
여러분은 반복 작업을 통해 위대한 소프트웨어를 작성합니다
반복 심화 작업: 두 가지 기본적인 선택
특징 주도 개발(Feature driven development)
유스케이스 주도 개발(Use case driven development)
개발의 두 가지 접근 방식
특징 분석
테스트 시나리오 작성하기
테스트 주도 개발(test driven development)
공통점 분석
공통점 강조하기
캡슐화 강조하기
테스트를 설계에 적용하세요
테스트 케이스 해부...
여러분 자신을 고객에게 입증해 보이세요
우리는 지금까지 약정(contract)에 의해 프로그램을 작성했습니다
약정에 의한 프로그래밍이란 정말로 모두 믿음에 관한 것입니다
방어적 프로그래밍(depensive programming)
어플리케이션을 기능의 작은 덩어리도 나누어 보세요
핵심 정리
OOA&D 도구 상자
10장. 종합하기
OOA&D 스타일로 소프트웨어 개발하기
객체 마을 지하철 문제
객체 마을 지하철 노선도
특징 리스트
유스케이스는 사용법을 반영하고, 특징은 기능을 반영합니다
반복 작업(iteration) 시작하기
지하철 표시하기에 대해 자세히 살펴보기
Line 클래스를 사용하느냐, 마느냐
객체 마을 Subway (클래스)의 흥미로운 점들
당신의 클래스들 보호하기
휴식 시간
요구 사항 단계로 돌아가기
코드에 집중하고, 다음 고객들에게 집중하세요
반복 작업은 문제를 쉽게 합니다
경로는 어떻게 생겼나요?
스스로 객체 마을 지하철 시스템을 점검해보세요
반복 작업 #3, 누구든지?
여행은 끝나지 않았습니다...
부록 A. 10개의 핵심 토픽 (우리가 다루지 않았던)
#1. IS-A와 HAS-A
#2. 유스케이스 형식
#3. 안티 패턴
#4. CRC 카드
#5. 메트릭(Metrics)
#6. 시퀀스 다이어그램(Sequence Diagram)
#7. 상태 다이어그램(State Diagram)
#8. 단위 테스팅(Unit testing)
#9. 코딩 규칙과 읽기 쉬운 코드
#10. 리팩토링(Refactoring)
부록 B. 객체지향 언어로 말하기
UML과 클래스 다이어그램
상속
다형성
캡슐화
핵심 정리