6. 소프트웨어 위기
소프트웨어 위l의 주요한 위lr 컴퓨터 성능이 몇 수십 배나 더 강력해졌기
때문입st! 심하게 말하면, 컴퓨터가 없었을 r 프로i래밍에r 전혀 문제가
없었습st( q린 컴퓨터 몇 개 뿐이었을 r 프로i래밍이 조k 문제가 되었
c, 이제r 거v한 컴퓨터에 프로i래밍x 따라서 거v한 문제가 되었습st(
' 에츠허르 w이크스트라 / 1.-, 01M 튜링상 수상 연설
F. L. 바우어(Fritz Bauer), 1968, 나토 SW 공학 학회
http://homepages.cs.ncl.ac.uk/brian.randell/NATO/NATOReports/index.html
12. 관심사 분리
(Separation of concerns)
Edsger W. Dijkstra, 1974, "On the role of scientific thought”
“e심사 분리r, 완벽하지r 않t 해x, 아직은 ph가의 생각을 효율
적으로 정리하rw 사용할 수 있r 유일한 l법이t(”
“sepaKaMCoG o@ coGceKGs X eOeG C@ GoM peK@ecMly possCble Cs yeM Mhe
oGly aOaClable MechGCJue @oK e@@ecMCOe oKdeKCGA o@ oGe’s MhouAhMs”
“특정 e점에 주의를 집중함”
“@ocusCGA oGe's aMMeGMCoG upoG some aspecM”
30. 객체 생성 문제
malloc() new
?
GRASP의 생성자(creator) 원칙
누가 객체를 생성해야 하나?
대상 클래스로 구성되는 클래스
대상 클래스를 담고 있는 클래스
대상 클래스의 인스턴스를 기록하는 클래스
대상 클래스와 가깝게 사용되는 클래스
대상 클래스를 생성하는데 필요한 데이터가 있는 클래스
5A A G
137. GRASP
일반 책임 할당 소프트웨어 원칙(또는 패턴)
Information Expert
Controller
Creator
High Cohesion
Low Coupling
Indirection
Pure Fabrication
Polymorphism
Protected Variations
http://en.wikipedia.org/wiki/GRASP_%28object-oriented_design%29
138. 설계 패턴
크리스토퍼 알렉산더: 패턴 창안
켄트 벡 워드 커닝햄: SW에 패턴
도입 (OOPSLA 1987)
에릭 감마, 리처드 헬름, 랄프 존슨,
존 블리시데스: 디자인 패턴 출판
Creational patterns
Structural patterns
Behavioral patterns
144. 테스트 자동화
Fast: 테스트는 수행 속도가 빨라서 테스트에 부담이 없어야 한다.
Independent: 테스트는 서로 영향을 주지 않고 독립적으로 순서에 상관
없이 실행될 수 있어야 한다.
Repeatable: 테스트는 어떤 환경에서도 반복해서 실행할 수 있어야 한
다.
Self-Validating: 테스트는 사람이 관여하지 않고도 결과를 알 수 있도
록 참과 거짓이 분명해야 한다.
Timely: 테스트는 적시에 작성해야 한다. 구현 바로 직전이 최적이다.
F.I.R.S.T
수시로 리팩터링을 수행하면서 점진적으로 설계를 개선하도록
도와주는 안전장치
145. 창발적 설계
- 코드 속 설계의 발굴
- 효과적인 추상화
- 기술적 추상화
- 문제 도메인 추상화
- 관용적 패턴 수집
146. 진화하는 아키텍처
“i 아키텍트들이 왔t( i들은 X7가 프로i래머들한테r 좋을지 몰라x, 아
키텍처를 프로젝트 초기의 어느 단계에서 설계할 수 있x록 해준t면 모든 일이
훨씬 부드럽게 진행될 거라c 설명했t( 사람들은 이에 v해, 흐름을 옹호해야
하며, 아키텍트 역시 흐름 원칙에 따라서 처음에r 아키텍처를 시작하l 충분할
정x로만 만들c 일을 진행하면서 꾸준히 다듬어가야 한tr 주장을 아키텍트
들에게 퍼부었t( ag i들은 마지못해 i렇게 하겠tc y의했지만, i래x
아키텍처 ub가 따로 있r 만큼 좋지r 않을 것이라c 말했t(”
?
익스트림 프로i래밍, 71,0, “전체 X7팀”에서
147. 횡단 관심사
로직 A 로직 B 로직 C 로직 D
캐시
인자 확인
트랜잭션 관리
로그 기록
인증
오류 차단
관심사 분리 대상
- 서로 다른 여러 추상 경로에 횡단으로
걸친 중복
- 분해하기 불가능 하거나 어려움
- 강한 결합
- 반복적인 다량의 코드 양산
- 낮은 코드 재사용, 가독성의 원인
148. 관점 지향 프로그래밍
• 횡단 관심사의 중앙 집중
• 메서드 호출을 가로채어 처리
• 새로운 행위를 추가
• 재사용성 향성
• 가독성 향상
횡단 관심사를 분리함으로서 모듈화를 고도화 하려는 기술
151. 스프링 프레임워크는…
스프링 프레임워크는 자바 플렛폼으로서 자바 애플리케
이션을 개발하는데 필요한 하부 구조를 포괄적으로 제공
합니다. 스프링이 하부 구조를 처리하므로 개발자는 애플
리케이션 개발에 집중할 수 있습니다.
Spring Framework is a Java platform that provides comprehensive
infrastructure support for developing Java applications. Spring
handles the infrastructure so you can focus on your application.
152. Java EE
• Java EE는 다량의 배관 코드를 요구한다.
• 많은 Java EE 관련 패턴은 Java EE의 단점 때문에 생겼다.
• Java EE는 테스트가 힘들다.
• Java EE는 개발자가 쓰기에는 적당하지 않다.
이런 문제에도 불구하고 Java EE는 풍부한 개발 기반을 제공한다.
Java EE를 추상화해서 개발자가 편하게 사용할 수 있는 추상화 계층 필요
159. 스프링의 특징
• 관심사 분리를 통한 로직 순수성 유지
(비침투성, POJO, DI, AOP)
• 컴포넌트 기반 애플리케이션 구성
• 컴포넌트 생애 관리
• Effective Java
• 테스트 용이성
• 각종 자바 EE 기술 통합
• 자바 EE 추상화를 통한 생산성 향상
• 메타프로그래밍
창발적 설계
진화하는 아키텍처 지원
160. 2000년 대 후반 이후의 변화
• 소비자 시장 개발 기술의 기업 시장 진출 시도
• 생산성 경쟁
• 클라우드 보급(IaaS, PaaS, SaaS)
• 무어의 법칙 종료, 멀티 코어 CPU 시대
• 빅 데이터/패스트 데이터
• 시스템 통합