PPT문서ch05_상위 설계.pptx

닫기

background image

IT CookBook, 쉽게 배우는 소프트웨어 공학

[강의교안 이용 안내]

• 본 강의교안의 저작권은 김치수와 한빛아카데미㈜에 있습니다.

• 이 자료는 강의 보조자료로 제공되는 것으로, 학생들에게 배포되어서는 안 됩니다. 


background image

Chatpter 

05 상위 설계

01 설계의 이해

02 설계의 원리

03 소프트웨어 아키텍처

04 디자인 패턴

요약

연습문제


background image

3/89

소프트웨어 설계 원리를 이해한다

.

소프트웨어 아키텍처를 살펴본다

.

소프트웨어 아키텍처 스타일을 알아본다

.

소프트웨어 디자인 패턴을 살펴본다

.


background image

Section 01 설계의 이해


background image

5/89

1. 설계의 이해


background image

6/89

1-1 설계의 예: 옷본


background image

7/89

1-2 건축 설계 과정


background image

8/89

2. 소프트웨어 설계

 분석 단계

사용자의 요구 사항을 토대로 요구 분석 명세서 작성

개념적이고 추상적

, what(무엇) 관점

 설계 단계

분석 단계에서 파악한 비기능적 요구 사항과 제약 사항 고려 

운영체제

·미들웨어·프레임워크 등의 플랫폼 결정, how(어떻게) 관점

 설계

요구 분석 명세서를 기반으로 어떻게 구축할 것인가를 결정하는 것

설계자

: 다양한 제약 조건을 만족시킬 수 있는 최적의 설계안을 만드는 것이 중요

설계를 평가할 수 있는 기준도 정량적으로 명시


background image

9/89

3. 좋은 설계의 조건

• 요구 분석 명세서의 내용을 설계서에 모두 포함해야 한다

.

• 유지보수가 용이하도록 추적이 가능해야 한다

.

• 변화에 쉽게 적응할 수 있어야 한다

.

• 시스템 변경으로 인한 영향이 최소화되도록 국지적이어야 한다

.

• 설계서는 읽기 쉽고

, 이해하기 쉽게 작성해야 한다.


background image

10/89

4. 설계의 종류(1)


background image

11/89

4. 설계의 종류(2)

 상위 설계(예비 설계preliminary design)

• 아키텍처

(구조) 설계 : 시스템의 전체적인 구조

• 데이터 설계 

: 시스템에 필요한 정보를 자료구조와 데이터베이스 설계에 반영

• 시스템 분할 

: 전체 시스템을 여러 개의 서브시스템으로 나눈다.

• 인터페이스 정의 

: 시스템의 구조와 서브시스템들 사이의 인터페이스가 명확히 정의

• UI 설계 : 사용자가 익숙하고 편리하게 사용할 수 있도록 사용자 인터페이스설계

 하위 설계

• 각 모듈의 실제적인 내부를 알고리즘

(pseudo-code) 형태로 표현

• 인터페이스에 대한 설명

, 자료구조, 변수 등에 대한 상세한 정보를 작성


background image

Section 02 설계의 원리


background image

13/89

1. 설계의 원리


background image

14/89

2. 분할과 정복의 원리

 분할과 정복

큰 문제를 소 단위로 나누고 소 단위의 작업을 하나씩 처리하여 전체 일을 끝내는 방법

   (예) 대학의 종합정보시스템: 학사 관리, 회계 관리, 인사 관리 등으로 나눔

         학사 관리

: 수강 관리, 수업 관리, 성적 관리 등으로 나눔

 분할 형태

• 분산 시스템은 클라이언트와 서버로 분할

• 시스템은 여러 서브시스템으로 분할

• 서브시스템은 하나 이상의 패키지로 분할

• 패키지는 여러 클래스로 분할

• 클래스는 여러 메서드로 분할


background image

15/89

3. 추상화의 원리

 추상화abstraction

주어진 문제

(건물 도면)에서 현재의 관심사에 초점을 맞추기 위해, 특정한 목적과 관련된 필수 

정보만 추출하여 강조하고

(전기 배선도, 상하수도 배관도 등) 관련이 없는 세부 사항을 

생략함으로써 본질적인 문제에 집중할 수 있도록 하는 작업


background image

16/89

3-1 도형의 추상화


background image

17/89

3-2 객체지향 설계에서의 추상화


background image

18/89

3-3 추상화의 종류(1)

 과정 추상화procedure abstraction


background image

19/89

3-3 추상화의 종류(2)

 Class의 특징

사용자에게 클래스가 제공할 수 있는 사용법만 알려주고

, 불필요한 데이터와 연산을 감춤 

사용자는 클래스에서 제공하는 연산 기능만 알고 그 연산을 사용하여 데이터 값을 변경

 데이터 추상화data abstraction

대표적인 예

: C++ 언어의 클래스


background image

20/89

3-3 추상화의 종류(3)

 제어 추상화control abstraction


background image

21/89

4. 단계적 분해

 단계적 분해

하향식 설계에서 사용

기능을 점점 작은 단위로 나누어 점차적으로 구체화하는 방법 


background image

22/89

5. 모듈화

 모듈

‘규모가 큰 것을 여러 개로 나눈 조각’

‘소프트웨어 구조를 이루는 기본적인 단위’

‘하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합’

라이브러리 함수

, 그래픽 함수

라이브러리 함수

, 그래픽 함수, 추상화된 자료, subroutine, procedure, object, method

   → 독립 프로그램도 하나의 모듈로 가능

, 함수들도 하나의 모듈로 가능

 모듈의 특징

다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위이다

.

유일한 이름을 가져야 한다

.

독립적으로 컴파일이 가능하다

.

모듈에서 또 다른 모듈을 호출할 수 있다

.

다른 프로그램에서도 모듈을 호출할 수 있다


background image

Section 03 소프트웨어 아키텍처


background image

24/89

1. 소프트웨어 아키텍처


background image

25/89

2. 아키텍처의 특징과 기능(1)

 아키텍처의 정의

구성 요소

구성 요소들 사이의 관계

구성 요소들이 외부에 드러내는 속성

구성 요소들과 주변 환경 사이의 관계

구성 요소들이 제공하는 인터페이스

구성 요소들의 협력 및 조립 방법

 소프트웨어 아키텍처

개발할 소프트웨어 대한 전체적인 구조를 다룬다

.

소프트웨어를 이루고 있는 여러 구성 요소

(서브시스템, 컴포넌트)를 다룬다.

구성 요소들이 인터페이스를 통해서 어떻게 상호작용하는지를 정의해야 한다

.

세부 내용보다는 중요한 부분만을 다룬다

.

시스템 설계와 개발 시 적용되는 원칙과 지침이 있어야 한다

.


background image

26/89

2. 아키텍처의 특징과 기능(2)

 아키텍처의 설계 시 고려 사항

의사소통 도구로 활용할 수 있어야 한다

.

구현에 대한 제약 사항을 정의해야 한다

.

품질 속성을 결정해야 한다

.

재사용할 수 있게 설계해야 한다

.

 아키텍처의 설계 시 기술 방법

이해하기 쉽게 작성 

명확하게 기술 

표준화된 형식 사용 

문서 버전 명시


background image

27/89

3. 아키텍처의 품질 속성

 품질 요구 사항

시스템이 제공해야 하는 품질 속성의 수준

가능하면 정확한 수치로 제시

 소프트웨어 아키텍처

이해 관계자들의 품질 요구 사항을 반영하여 품질 속성을 결정


background image

28/89

3-1 시스템 품질 속성(1)

 가용성(availability)

시스템이 운용될 수 있는 확률로

, 시스템이 장애 발생 없이 서비스를 제공할 수 있는 능력

가용성을 높이려면

: 하드웨어 이중화처럼 여분의 구성 요소를 포함하도록 설계

 변경 용이성(modifiability)

변경 요구 사항을 받았을 때 쉽게 변경할 수 있는 능력

빈번하게 변경할 가능성이 높은 소프트웨어는 변경 용이성을 고려하여 아키텍처를 결정

 성능(performance)

사용자 요청과 같은 이벤트가 발생했을 때

, 빠르고 적절하게 반응할 수 있는 능력

공유 자원을 어떻게 사용하는지

, 어떤 알고리즘을 사용해 구현하는지 등의 요소와 밀접


background image

29/89

3-1 시스템 품질 속성(2)

 보안성(security)

허용되지 않은 접근에 대응할 수 있는 능력

 사용성(usability)

소프트웨어를 사용할 때 혼란스러워하거나 사용하는 순간에 고민하지 않게 하는 편의성

 테스트 용이성(testability)

사용자가 요구하는 기능을 만족스럽게 잘 수행하고 있는지를 얼마나 쉽고 철저하게 테스트할 수 

있는지를 나타낸다

.


background image

30/89

3-2 비즈니스 품질 속성(1)

 시장 적시성time to market

정해진 날짜에 소프트웨어를 출시해 경쟁력을 높일 수 있는 정도

 비용과 이익cost and benefit

비용을 더 들여 사용하고 효과를 볼 것인지

, 아니면 비용을 절약하는 데 중심을 둘 것인지를 

말한다

.

아키텍처를 설계 시

: 비용을 더 많이 들여 유연한 설계를 할 것인지, 비용을 절감하는데 초점을 

맞출 것인지 판단해야 함

 예상 시스템 수명predicted lifetime of the system

수명이 중요한 경우라면 변경 용이성

, 확장성, 이식성을 더 중요하게 고려


background image

31/89

3-2 비즈니스 품질 속성(2)

 목표 시장targeted market

패키지 소프트웨어

: 기능성 및 다양한 플랫폼에서도 잘 작동되어야 하므로 이식성을 충분히 

고려한 설계 필요

 신규 발매 일정 또는 공개 일정rollout schedule

현재 버전에서는 기본 기능만 제공하고

, 추후에 배포할 차기 버전에서 기능을 추가하여 완성도를 

높일 예정이라면 유연성

flexibility과 확장성을 고려한 설계 필요

 기존 시스템과의 통합integration with legacy system

아키텍처 설계 시 기존 시스템과의 통합 방법을 충분히 고려한 설계 필요


background image

32/89

3-3 아키텍처 품질 속성

 개념적 무결성conceptual integrity

개념적 무결성은 일관성이라고도 함

전체 시스템과 시스템 구성 요소가 일관되도록 아키텍처를 결정

 정확성과 완전성correctness and completeness

사용자가 요구하는 기능을 충족시키는 정도로

, 요구 분석 명세서와 일치하는 정도

 개발 용이성(구축 가능성, buildability)

전체 시스템을 적절한 모듈로 분할한 후 개발 팀에 알맞게 분배하여 개발함으로써 정해진 기간 

내에 완성하고

, 개발 과정 중에도 쉽게 변경할 수 있는 능력


background image

33/89

3-4 이해 관계자별 품질 속성

 발주자 관점

제품 가격

(또는 개발비)이 중요, 응찰 시 가장 적게 써낸 업체 선정 확률 높음

 사용자 관점

완벽한 기능뿐만 아니라  사용하기 쉽고 빨리 이해할 수 있는 아키텍처의 속성을 요구

 개발자 관점

플랫폼이 달라져도 새로운 플랫폼에 쉽게 적용할 수 있는 아키텍처의 속성에 관심

변경 요청 시 쉽게 변경할 수 있는 설계


background image

34/89

4. 아키텍처 구축 절차(1)

 요구 사항 분석

소프트웨어 개발의 요구 사항 분석 단계와 같다

.

품질 속성과 같은 비기능적인 요구 사항에 더 많은 관심을 둠

     • 요구 사항 취득

, 식별, 명세, 분류, 검증

     • 기능적

/비기능적 요구 사항 분류 및 명세


background image

35/89

4. 아키텍처 구축 절차(2)

 아키텍처 분석

 아키텍처 설계

관점 정의

: 이해 관계자 파악, 이해 관계자별 관점 정의

아키텍처 스타일 선택

: pipe-filter, mvc, layer 등의 스타일 혼용 적용 가

후보 아키텍처 도출

: 배경도 및 각 관점별 다이어그램 작성, 아키텍처 명세서 기술

 검증 및 승인

아키텍처 평가

: 아키텍처 요구 사항 만족도, 적합성, 품질 속성간 절충 관계 등 평가

아키텍처 상세화

(반복): 설계 방법 도출, 설계 패턴 고려

아키텍처 승인

: 이해 관계자들이 최종 승인

우선순위 결정

우선순위 결

품질 속성 식별

품질 속성 식

반영 방법 개발

반영 방법 개


background image

36/89

5. 아키텍처의 4+1 관점(1)


background image

37/89

5. 아키텍처의 4+1 관점(2)


background image

38/89

5. 아키텍처의 4+1 관점(3)

 Usecase view

시스템이 사용자에게 제공하는 기능에 관심

다른 네 가지 관점에 사용되는 다이어그램의 근간

     • 정적 표현 

: 유스케이스 다이어그램

     • 동적 표현 

: 상태 다이어그램, 순차 다이어그램, 통신 다이어그램, 활동 다이어그램

 logical view(design view)

클래스나 컴포넌트의 종류와 이들의 관계에 초점

     • 정적 표현 

: 클래스 다이어그램, 객체 다이어그램

     • 동적 표현 

: 상태 다이어그램, 순차 다이어그램, 통신 다이어그램, 활동 다이어그램


background image

39/89

5. 아키텍처의 4+1 관점(4)

 implementation view

소프트웨어 서브시스템의 모듈이 어떻게 구조화되어 있는가에 관심

     • 정적 표현 

: 컴포넌트 다이어그램

     • 동적 표현 

: 상태 다이어그램, 순차 다이어그램, 통신 다이어그램, 활동 다이어그램

 process view

실제 구동 환경을 살펴봄으로써 논리적 관점과 같이 시스템 내부의 구조에 초점

시스템의 동시성과 동기화에 관심

     • 동적 표현 

: 상태 다이어그램, 순차 다이어그램, 협동 다이어그램, 활동 다이어그램

     • 시스템 구성 표현 

: 컴포넌트 다이어그램, 배치 다이어그램


background image

40/89

5. 아키텍처의 4+1 관점(5)

 deployment view

시스템을 구성하는 처리 장치 간의 물리적인 배치에 초점

서브시스템들이 물리적인 환경에서 어떻게 연관되어 실행되는지를 나타냄

.

시스템의 분산 구조와 실행할 때 컴포넌트들의 배치 상태를 나타냄

.

• 정적 표현 

: 배치 다이어그램

• 동적 표현 

: 상태 다이어그램, 순차 다이어그램, 통신 다이어그램, 활동 다이어그램


background image

41/89

6. 아키텍처 스타일(1)

 음식 스타일

한식

, 일식, 중식

음식 스타일에 따라 재료

, 조리 방법, 담을 그릇 등 결정


background image

42/89

6. 아키텍처 스타일(2)

 아키텍처 스타일에 따라

구조

, 규칙, 요소, 기법 등이 결정

소프트웨어 특성

, 전체 구조, 개발 방법을 알 수 있다.

 좋은 소프트웨어 아키텍처 설계

소프트웨어에 적합한 아키텍처 스타일을 선택하고 적용하고 통합하는 것

 아키텍처 스타일을 사용한 설계의 장점

• 개발 기간 단축

, 고품질의 소프트웨어 생산

• 수월한 의사소통

• 용이한 유지보수

• 검증된 아키텍처

• 구축 전 시스템 특성에 대한 시뮬레이션 가능

• 기존 시스템에 대한 빠른 이해


background image

43/89

6-1 아키텍처 스타일의 기능

      • 소프트웨어 시스템의 구조를 체계적으로 구성하기 위해 기본 스키마를 제시

      • 미리 정의된 서브시스템 제공

      • 각 아키텍처 패턴 간의 책임 명시

      • 패턴 간의 관계를 조직화하는 규칙

, 가이드라인 제시

      • 문제를 소프트웨어 모듈 단위로 분해하는 방법 제시

      • 분해한 소프트웨어 모듈 단위가 상호작용하는 방법 제시


background image

44/89

7. 아키텍처 모델


background image

45/89

7-1 데이터 중심형 모델(1)

 repository model

특징

: 주요 데이터가 repository에서 중앙 관리

구성

: repository와 여기에 접근하는 서브시스템

• repository : 공동으로 활용하는 데이터 보관

• 서브시스템: repository에 접근하여 정보를 저장, 검색, 변경하는 역할

대량의 데이터를 공유하는 은행 업무 시스템에 매우 유용한 모델


background image

46/89

7-1 데이터 중심형 모델(2)

 장점

데이터가 한군데에 모여 있기 때문에 데이터를 모순되지 않고 일관성 있게 관리 가능

새로운 서브시스템의 추가 용이

 단점

repository의 병목 현상 발생 가능

서브시스템과 

repository 사이의 강한 결합

    repository 변경 시 서브시스템에 영향을 줌


background image

47/89

7-2 client-server 모델

 Client-server 모델

네트워크를 이용하는 분산 시스템 형태

데이터와 처리 기능을 클라이언트와 서버에 분할하여 사용

분산 아키텍처에 유용

     • 서버

: 클라이언트(서브시스템)에 서비스 제공

     • 클라이언트

: 서버가 제공하는 서비스를 요청(호출)하는 서브시스템


background image

48/89

7-3 계층 모델

 layering 모델

기능을 몇 개의 계층으로 나누어 배치

구성

: 하위 계층은 서버, 상위 계층은 클라이언트 역할


background image

49/89

7-4 MVC 모델(1)

 Model/View/Controller 모델

중앙 데이터 구조

같은 모델의 서브시스템에 대하여 여러 뷰 서브시스템을 필요로 하는 시스템에 적합

세 개의 서브시스템으로 분리하는 이유

: 변경에 대한 영향을 덜 미치도록 하기 위해

           즉 

UI부분이 자주 변경되더라도 모델 서브시스템에는 영향을 주지 않기 위해


background image

50/89

7-4 MVC 모델(2)

 Model 서브시스템

/제어 서브시스템과 독립되어 모든 데이터 상태와 로직을 처리

특정 입

·출력 방식에 영향을 받지 않고, 무언가의 호출에 응답만 함

 View 서브시스템

사용자와 직접 대화가 이루어지는 부분으로 데이터를 사용자에게 보여주는 역할

 Controller 서브시스템

뷰를 통한 사용자의 요청을 적절한 모델 쪽으로 넘겨주고

, 모델로부터 받은 응답을 다시 뷰를 

통해 사용자에게 돌려주는 역할


background image

51/89

7-4 MVC 모델(3)

 장점

관심의 분리

데이터를 화면에 표현

(뷰)하는 디자인과 로직(모델)을 분리함으로써 느슨한 결합 가능

구조 변경 요청 시 수정 용이

 단점

기본 기능 설계로 인한 클래스 수의 증가로 복잡도 증가

속도가 중요한 프로젝트에 부적합


background image

52/89

7-5 데이터 흐름 모델

 Pipe and filter 구조

Filter: data stream을 한 개 이상 입력 받아 처리(변환)한 후 data stream 하나를 출력

pipe: filter를 거쳐 생성된 data stream 하나를 다른 filter의 입력에 연결


background image

Section 04 디자인 패턴


background image

54/89

1. 디자인 패턴

 디자인 패턴

자주 사용하는 설계 형태를 정형화해서 이를 유형별로 설계 템플릿을 만들어둔 것 

많은 개발자들이 경험상 체득한 설계 지식을 검증하고 이를 추상화하여 일반화한 템플릿


background image

55/89

2. 디자인 패턴 사용의 장/단점

 장점

• 개발자

(설계자) 간의 원활한 의사소통

• 소프트웨어 구조 파악 용이

• 재사용을 통한 개발 시간 단축

• 설계 변경 요청에 대한 유연한 대처

 단점

• 객체지향 설계

/구현 위주

• 초기 투자 비용 부담


background image

56/89

3. Gof 디자인 패턴

초보자가 설계 잘할 수 있는 방법

전문가의 지식과 노하우 공유

SW설계 방법론과 지침 공유

사례 공유

구체적 문제 적용의 어려움

다른 유형에 적용의 어려움

GoF의 디자인 패턴

문제점

문제점

해결 방법


background image

57/89

4. 디자인 패턴

여러 가지 문제에 대한 설계 사례를 

분석하여 서로 비슷한 문제를 해결하기 

위한 설계들을 분류하고

, 각 문제 

유형별로 가장 적합한 설계를 일반화해 

패턴으로 정립한 것을 의미

소프트웨어 설계에 대한 지식이나 

노하우가 문제 유형별로 잘 구체화되어 

있을 뿐 아니라

, 동일한 문제 유형에 

대해서는 그 해결 방법에 대한 지식이나 

노하우가 패턴 형태로 충분히 일반화된 

것 


background image

58/89

4-1 factory method 패턴

Factory: 공장, 물건을 만드는 곳(물건-인스턴스)

상위 클래스에서 객체를 생성하는 인터페이스를 정의하고

, 하위 클래스에서 인스턴스를 

생성하도록 하는 방식

객체를 생성하는 시점은 알지만 어떤 객체를 생성해야 할지 알 수 없을 때

, 객체 생성을 하위 

클래스에 위임하여 해결


background image

59/89

4-2 Singleton 패턴

Singleton: ‘단독 개체’, ‘독신자’라는 뜻 말고도 ‘정확히 하나의 요소만 갖는 집합’

특정 클래스의 객체가 오직 한 개만 존재하도록 보장

, 즉 클래스의 객체를 하나로 제한

동일한 자원이나 데이터를 처리하는 객체가 불필요하게 여러 개 만들어질 필요가 없는 경우에 

주로 사용


background image

60/89

4-3 prototype 패턴

new Object( )보다 clone( )을 이용해 기존의 것을 복사하여 일부만 바꿔 인스턴스 생성

일반적인 

prototype(원형)을 만들어놓고, 그것을 복사한 후 필요한 부분만 수정하여 사용

인스턴스를 복제하여 사용하는 구조

생성할 객체의 원형을 제공하는 프로토타입 인스턴스로부터 생성할 객체들의 타입 결정

객체를 생성할 때 갖추어야 할 기본 형태가 있을 때 사용


background image

61/89

4-4 Builder 패턴

복잡한 인스턴스를 조립하여 만드는 구조

복합 객체를 생성할 때 객체를 생성하는 방법

(과정)과 객체를 구현(표현)하는 방법을 분리

동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있다

.


background image

62/89

4-5 abstract factory 패턴

abstract factory: ‘추상적인 공장’, 

[그림 5-33]과 같이 여러 개의 concrete Product를 추상화시킨 것

구체적인 구현은 

concreteProduct 클래스에서 이루어짐

사용자에게 

API를 제공하고, 인터페이스만 사용해서 부품을 조립하여 만든다. 

  즉 추상적인 부품을 조합해서 추상적인 제품을 만든다

.


background image

63/89

4-6 Composite 패턴

Composite: ‘합성의’, ‘합성물’, ‘혼합 양식’

composite object: 부분-전체의 상속 구조로 표현되는 조립 객체

사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한 것

재귀적 구조

: 디렉토리 안에 파일 또는 다른 디렉토리(서브 디렉토리)가 존재할 수 있는 것

그릇

(디렉토리)과 내용물(파일)을 동일시해서 재귀적인 구조를 만들기 위한 설계 패턴


background image

64/89

4-7 adapter 패턴(1)

 adapter

‘접속 소켓’

, ‘확장 카드’, ‘(물건을 다른 것에) 맞추어 붙이다’, ‘맞추다’


background image

65/89

4-7 adapter 패턴(2)

 adapter 패턴

기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할

호환성이 없는 기존 클래스의 인터페이스를 변환해 재사용할 수 있도록 해준다

.

• 클래스 

adapter 패턴 : 상속을 이용한 어댑터 패턴

• 인스턴스 

adapter 패턴 : 위임을 이용한 어댑터 패턴


background image

66/89

4-8 bridge 패턴

bridge: ‘무엇인가를 연결한다’

두 장소를 연결하는 역할

기능의 클래스 계층과 구현의 클래스 계층을 연결하고

, 구현부에서 추상계층을 분리하여 각자 

독립적으로 변형할 수 있게 해준다

.

구현과 인터페이스

(추상화된 부분)를 분리할 수 있고, 추상화된 부분과 실제 구현 부분

   을 독립적으로 확장할 수 있다

.


background image

67/89

4-9 decorator 패턴

Decoration: ‘장식(포장)’

기존에 구현되어 있는 클래스

(둥근 모양의 빵)에 그때그때 필요한 기능(초콜릿, 치즈,

생크림

)을 추가(장식, 포장)해나가는 설계 패턴

기능확장이 필요할 때 상속의 대안으로 사용


background image

68/89

4-10 facade 패턴

Façade: ‘건물의 앞쪽 정면(전면)’

몇 개의 클라이언트 클래스와 서브시스템의 클라이언트 사이에 

facade라는 객체를 

세워놓음으로써 복잡한 관계를 정리

(구조화)한 것

모든 관계가 전면에 세워진 

facade 객체를 통해서만 이루어질 수 있게 단순한 인터페이스를 

제공

(단순한 창구 역할)하는 것


background image

69/89

4-11 Flyweight 패턴

Flyweight: ‘(권투·레슬링 등의) 플라이급 선수(보통 체중 48~51kg 사이)’, 즉 가벼운 것

메모리를 가볍게 해준다고 짐작할 수 있다

.

메모리 사용량을 줄이기 위한 방법으로

, 인스턴스를 필요한 대로 다 만들어 쓰지 말고, 동일한 

것은 가능하면 공유해서 객체 생성을 줄이자는 것


background image

70/89

4-12 Proxy 패턴

Proxy: ‘대리인’, 즉 뭔가를 대신해서 처리하는 것

그림과 텍스트가 섞여있는 경우 텍스트가 먼저 나오고 나중에 그림이 나올 수 있도록 하기 위해 

텍스트 처리용 프로세스

, 그림 처리용 프로세스를 별도로 두고 운영하는 것 같은 설계


background image

71/89

4-13 iterator 패턴(1)

Iterate: ‘반복하다’, iterator: ‘반복자’

반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 아래 그림 처럼 

it-

erator 객체 속에 넣은 다음, iterator 객체의 메서드를 이용해 자료구조를 활용할 수 있도록 

해준다

.

데이터들의 집합체를 모두 동일한 인터페이스를 사용하여 조작함으로써 데이터들의 집합체를 

쉽게 사용할 수 있게 해준다

.


background image

72/89

4-13 iterator 패턴(2)


background image

73/89

4-14 Observer 패턴(1)

Observer:  ‘관찰하는 사람’, ‘관찰자’

위 그림의 예처럼 어떤 클래스에 변화가 일어났을 때

, 이를 감지하여 다른 클래스에 통보해주는 


background image

74/89

4-14 Observer 패턴(2)


background image

75/89

4-15 strategy 패턴(1)

Strategy: ‘전략’, ‘전술’ 

소프트웨어 개발에서 전략이나 전술은 알고리즘으로 구현

위 그림처럼 알고리즘 군을 정의하고

(strategySort 추상클래스) 같은 알고리즘(버블 정렬, 퀵 

정렬

, 선택 정렬 등)을 각각 하나의 클래스로 캡슐화한(quickSort 클래스, selectSort 클래스, 

bubbleSort 클래스) 다음, 필요할 때 서로 교환해서사용할 수 있게 해준다.


background image

76/89

4-15 strategy 패턴(2)

 Strategy 패턴 

클라이언트와 무관하게 독립적으로 알고리즘 변경 가능

(quickSort →bubbleSort), 

클라이언트는 독립적으로 원하는 알고리즘 사용 가능

클라이언트에게 알고리즘이 사용하는 데이터나 그 구조를 숨겨주는 역할

알고리즘을 사용하는 곳과

, 알고리즘을 제공하는 곳을 분리시킨 구조로알고리즘을 동적으로 

교체 가능


background image

77/89

4-16 template method 패턴

Template: 하나의 ‘틀’

이런 틀 기능을 구현할 때 

template method 패턴을 이용

상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 디자인 

패턴


background image

78/89

4-17 Visitor 패턴(1)

Visitor: ‘방문자

위 그림처럼 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 

visitor 클래스로 

만들어놓고 해당 클래스의 메서드

(visitElement A, visitElement B)가 각 클래스를 

돌아다니며 특정 작업을 수행하도록 하는 것


background image

79/89

4-17 Visitor 패턴(2)

 Visitor 패턴

객체의 구조와 기능을 분리

객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 많이 사용

장점

: 클래스의 데이터 구조 변경 없이 기존 작업(기능) 외에 다른 작업을 추가하기가 수월


background image

80/89

4-18 chine of responsibility 패턴(1)

 chine of responsibility

책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조

소프트웨어 개발에서도 이렇게 자동으로 연결되는 구조로 프로그램을 만들면 매우 유용한데 이 

개념을 적용할 수 있는 것이 바로 

chine of responsibility 패턴


background image

81/89

4-18 chine of responsibility 패턴(2)

 chine of responsibility 패턴


background image

82/89

4-19 command 패턴(1)

Command: ‘명령어’

  (예) 문서편집기의 복사(copy), 붙여넣기(paste), 잘라내기(cut) 등

위의 명령어를 각각 구현하는 것보다는 위 그림처럼 하나의 추상 클래스에 

execute( ) 메서드를 

하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스

(copy_command)가 선택되어 

실행하는 것이 효율적


background image

83/89

4-19 command 패턴(2)

 Command 패턴

단순히 명령어를 추상 클래스와 구체 클래스로 분리하여 단순화한 것으로 끝나지 않고

, 명령어에 

따른 취소

(undo) 기능까지 포함

• 이유: 사용자 입장에서는 해당 명령어를 실행했다가 취소(undo)하기도 하기 때문

이렇게 프로그램의 명령어를 구현할 때 

command 패턴을 활용

  


background image

84/89

4-20 mediator 패턴(1)

Mediator: ‘중재자’, ‘조정자’, ‘중개인’

부동산 중개사

, 비행기의 이착륙을 통제하는 관제탑, 중고물건을 사고파는 사이트처럼 중간에서 

연결하고 통제하는 역할  


background image

85/89

4-20 mediator 패턴(2)


background image

86/89

4-21 state 패턴

State: ‘상태’

동일한 동작을 객체 상태에 따라 다르게 처리해야 할 때 사용

아래 그림처럼 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식으로 상태에 따라 

다르게 처리

(upState, stopState, downState)할 수 있도록 한 것

변경 시

(신규 상태 추가) 원시 코드의 수정을 최소화할 수 있고, 유지보수를 쉽게 할 수 있다.


background image

87/89

4-22 memento 패턴

Memento: ‘(사람, 장소를 기억하기 위한) 기념품’

undo 기능을 개발할 때 유용

클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용


background image

88/89

4-23 interpreter 패턴

Interpreter: ‘통역자’

단어의 의미처럼 무언가를 번역하는 데 사용

간단한 언어의 문법을 정의하고 해석하는 데 사용

문법 규칙을 클래스화한 구조를 갖는

SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용


background image

Thank You