일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 인프라
- NIO
- flet
- 자바암호
- android
- JVM
- chatGPT's answer
- jpa
- 데이터베이스
- 소프트웨어공학
- Database
- 리눅스
- 코틀린
- 파이썬
- python
- write by GPT-4
- spring integration
- 자바
- kotlin
- write by chatGPT
- oracle
- 자바네트워크
- GPT-4's answer
- 고전역학
- 역학
- 유닉스
- 웹 크롤링
- 시스템
- spring data jpa
- Java
- Today
- Total
기억을 지배하는 기록
디자인 패턴(Design Pattern) 본문
디자인 패턴의 정의
- 반복되는 공통적인 문제에 대하여 가장 적절한 해결책을 제시하는 것.
- 프로그래밍에 적용 가능하도록 다양한 구현방법들을 패턴화하여 재사용한다는 개념.
디자인 패턴의 등장 배경
- 객체지향 방법론을 활용하기 위해서는 규격화된 패턴이 필요함.
- 객체지향 디자인 개념을 이론으로 제시하는 데 그치지 않고 프로그래밍에 적용 가능하도록 구체적으로 규격화 시킨 것.
디자인 패턴의 특징
- 객체지향 방법론의 가장 큰 장점인 재사용성과 모듈성을 극대화시켜 실제 구현 과정에서의 해결방안으로 제시 가능함.
- 특수한 디자인 문제를 해결하는 동시에 객체지향 디자인을 보다 유동적으로 재사용 가능한 형태로 만들어 줌
- 프로그램 디자인의 일반 형태는 변화 가능한 코드와 변화 가능성이 없는 코드와의 분리를 통해 개발 이후에 코드의 유지보수를 용이하게 하며 이해하기 쉬운 코드로 단순화함.
- 객체지향 분석과 설계 작업에 관련된 프로그래머는 프로젝트에서 각각의 일반적인 문제 패턴을 인식하여, 이미 설정된 디자인 패턴에서 일치되는 것을 찾아 솔루션 템플릿을 프로젝트에 적용
- 개발에 따른 산출 문서를 보다 향상시킬 수 있으며 불명확한 클래스의 기능, 객체간의 부적절한 연관관계 등을 제거해 시스템에 대한 유지보수도 용이하게 함.
- 어플리케이션의 확장성을 향상시키며 비즈니스 요구사항의 변화에도 제대로 반응할 수 있게 해 줌
- 패턴은 설계시 발생하는 문제점에 대해 새로운 해결안을 반복적으로 찾아야 하는 시간을 주며 개발기간을 단축할 수 잇게 해줌
디자인 패턴을 적용할 때 제일 중요한 세가지 규칙
- 구현 클래스가 아니라 인터페이스를 가지고 프로그래밍한다. : 인터페이스를 바탕으로 하는 클래스 호출
- 상속(inheritance)이 아니라 위임(delegation)을 주로 사용한다.
- Coupling을 최소화함으로써 추후의 변화를 국부화 한다. : 어느 하나의 기능 변화가 전체 클래스 구조를 바꾸거나 혹은 많은 부분에 걸친 변화를 야기한다면 디자인이 초기부터 잘 못 된 거라 할 수 있다. 디자인 패턴의 기본 중에 기본은 “coupling을 최소화” 함에 있다.
디자인패턴 카탈로그 기술 형식
- name(이름) : 패턴의 이름은 패턴 자체의 내용을 효과적으로 전달할 수 있어야 한다.
- Classification(종류) : 여러 개의 패턴들을 체계적으로 분류한다. (예: 생성, 구조, 행위)
- Intent(의도) : 이 패턴이 무엇을 하며 어떤 의도로 작성되었으며 무슨 문제를 해결하는 지를 설명하는 간단한 문장
- Motivation(동기) : 이 패턴이 해결해야 하는 디자인 문제와 그것을 해결하기 위해 클래스와 객체들이 어떻게 사용되는지에 대해 시나리오 형식으로 기술함
- Applicability(적용시기)
- Structure(구조) : 패턴에서 문제를 해결하기 위해 사용되는 클래스와 객체의 구조 UML 다이어그램을 통해서 일반적으로 표현한다.
- Participants(구성물) : “구조”항목에 포함된 각종 클래스와 객체의 의미와 그 책임을 설명
- Collaboration(협력관계) : 각 클래스와 객체가 자신에게 맡겨진 책임을 수행하기 위해 서로 메시지를 주고 받는 과정을 묘사함.
- Consequence(결과) : 패턴이 목적을 달성하기 위해 어떤 면을 해결하는 지를 설명하고 패턴을 적용할 때 발생할 수 있는 문제점과 패턴적용시의 효과, 시스템 상황에 따라서 변동하는 부분들을 기술
- Implementation(구현) : 패턴을 구현할 때의 고려사항과 힌트, 함정, 테크닉등과 프로그래밍 언어 별로 주의해야 할 점들을 기술
- Sample Code(예제코드) : 특정 프로그래밍 언어로 패턴을 구현한 예제를 보임
- Known Uses(알려진 사례) : 실제로 사용되는 시스템에서 발견되는 패턴의 예제를 기술
- Related Patterns(관련 패턴) : 본 패턴과 유사하거나 밀접하게 관련된 다른 패턴을 기술
디자인 패턴의 분류
생성 관련 패턴(싱글턴, 추상 팩토리, 팩토리 메소드, 빌더, 프로토타입)
객체 인스턴스 생성을 위한 패턴으로, 클라이언트와 그 클라이언트에서 생성해야 할 객체 인스턴스 사이의 연결을 끊어주는 패턴.
행동 관련 패턴(템플릿 메소드, 커맨드, 어터레이터, 옵저버, 스테이트, 스트래티지)
클래스와 객체들의 상호작용 하는 방법 및 역할을 분담하는 방법관 관련된 패턴.
구조 관련 패턴(데코레이터, 컴포지트, 프록시, 퍼사드, 어댑터)
클래스 및 객체들을 구성을 통새허 더 큰 구조로 만들수 있게 해주는 것과 관련된 패턴.
디자인 패턴 선택시 고려요소
1. 가변성을 찾아라.
패턴은 가변성을 캡슐화하는 것
요구사항에서 가장 가변 확률이 높은 요소를 식별하는 것은 최적의 패턴을 선택하는 데 중요한 실마리를 제공함.
2. Keep It Simple, Stupid!
필요하지 않은 문제에 패턴을 마구잡이로 사용하는 것을 피함.
두 가지 이상의 적용 가능한 패턴 기반의 솔루션을 비교할 때는 가장 단순한 설계를 선택 한다.
3. 문제의 범위를 알아라.
'오래된글 > 소프트웨어공학' 카테고리의 다른 글
소프트웨어 개발방법론 (0) | 2018.04.19 |
---|---|
마르미 III 개발 방법론 (0) | 2018.04.19 |
나선형(Spiral) 모델 (0) | 2018.04.19 |
구조적 방법론 (0) | 2018.04.19 |
객체지향 방법론 (0) | 2018.04.19 |