반응형
1. 디자인 패턴의 개념
가. 디자인 패던의 정의
- 소프트웨어를 개발하는 동안 공통적으로 발생하는 문제점들의 해법을 재사용이 가능하도록 공통언어로 정형화한 소프트웨어 설계 양식.
- 소프트웨어 개발 시 일어날 수 있는 일반적인 문제점들을 유형에 따라 분류하고, 문제 해결을 위한 정형화된 소프트웨어 설계 양식.
- 재이용 가능한 객제지향 소프트웨어의 요소.
나. 디자인 패턴의 필요성
- 동일 문제의 해법으로 제시된 디자인 패턴을 사용하므로 개발기간을 단축함.
- 정형화된 디자인 패턴을 사용하므로 소프트웨어 개발 시 의사소통이 용이함.
- 소프트웨어의 디자인이 명료해지고, 재사용성, 확장성, 유지보수성이 향상됨.
다. 디자인 패턴의 등장배경
- 소프트웨어 개발시 자주 발생하는 문제들의 공통점을 찾아내어 해결하기 위해 등장.
- GoF(Gang of Four)라 불리던 4명의 컴퓨터 과학자들의 저서를 통해 23가지 디자인 패턴이 소개됨.
라. 디자인 패턴의 적용 규칙
규 칙 | 상세 설 명 |
구현 클래스가 아닌 인터페이스 사용 |
클래스에 모든 것을 바로 구현하는 것이 아니라 클래스의 공통 기능, 데이터 등을 인터페이스의 메소드로 표현하여 변화와 확장성을 고려함. |
상속이 아닌 위임사용 |
상속은 컴파일시 슈퍼클래스와 서브클래스구조로 인스턴스가 생성되고 클래스간 관계가 강하여 확장이나 변경시 비효율적임, 반면 위임은 클래스간 관계가 느슨하여 확장이나 변경이 용이함. |
커플링(Coupling)을 최소화 | 한 클래스 변화가 다른 클래스들에게 영향을 미치지 않기 위해 최소화 함. |
마. 디자인 패턴의 장점과 단전
장 점 | 단 점 |
시스템 개발시 공통언어 역할 | 잘못된 패턴 사용은 개발을 어렵게 만듬 |
코드의 품질과 재사용성이 향상됨 | 잘못된 패턴은 유지보수를 어렵게 만듬 |
객체의 변경와 확장이 용이해짐 | 잘못된 패턴은 재상용성을 떨어뜨림 |
유지보수가 편리해짐 | 디자인 패턴을 습득하는데 시간이 필요함 |
바. 디자인 패턴의 구성요소_소프트웨어 공학
구 분 | 상 세 설 명 |
이름 | 패턴의 이름만으로 패턴의 내용을 전달할 수 있어야 함. |
분류 | 패턴들을 목적, 범위에 따라 구분하는 기준 |
문제와 배경 | 패턴이 사용되는 분야 또는 배경, 해결하는 문제 |
솔루션 | 패턴을 이루는 요소들, 관계, 협동 과정 |
사례 | 패턴을 적용할 수 있는 간단한 사례 |
결과 | 패턴을 사용하면 얻게 되는 이점이나 영향 |
샘플코드 | 패턴이 적용된 원시 코드 |
바. 디자인 패턴의 구성요소_GoF
구 분 | 상 세 설 명 |
이름 (Name) | 패턴 자체의 내용을 효과적으로 전달할 수 있는 이름 |
종류 (Classification) | 여러개의 패턴을 체계적으로 분류 (GoF) - 생성 (Creational) : 객체들의 생성과 관련 - 구조 (Structural) : 클래스, 객체의 정적인 구조와 관련 - 행위 (Behavioral) : 클래스와 객체의 반응과 책임할당 |
의도 (Intent) |
이 패턴이 무엇을 하며 어떤 의도로 작성되었으며, 무슨 문제를 해결하는 지의 설명을 기술 |
별칭 (Also Known as) |
위의 공식적인 이름 외에 잘 알려진 다른 이름 |
동기 (Motivation) |
이 패턴이 해결해야 하는 디자인 문제와 그것을 해결하기 위해 클래스와 객체들이 어떻게 사용되는지에 대해 시나리오 형식으로 기술 |
구조 (Structure) |
패턴 안에서 문제를 해결하기 위해 사용되는 클래스와 객체의 구조, UML 다이어그램을 통해 표현 |
구성물 (Participants) | 구조항목에 포함된 각종 클래스, 객체의 의미와 그 책임을 설명 |
협력과정 (Collaborations) | 각 클래스와 객체가 자신에게 맡겨진 책임을 수행하기 위해 서로 메시지를 주고받는 과정을 묘사한다. |
결과 (Consequence) | 패턴이 목적을 달성하기 위해 어떤 면을 해결하는지를 설명하고 패턴을 적용할 때 발생할 수 있는 문제점과 패턴 적용시의 효과, 시스템 상황에 따라서 변동하는 부분들을 기술 |
구현 (Implementation) | 패턴을 구현할 때의 고려사항과 힌트, 함정, 테크닉 등과 프로그래밍 언어별로 주의해야 할 점 등을 기술 |
샘플코드 (Samplecode) |
특정언어로 패턴을 구현한 예제 실제로 사용되는 시스템에서 발견되는 패턴의 예제 |
반응형
'TechNote > 소프트웨어 공학(SW)' 카테고리의 다른 글
016. 리펙토링_Refactoring (0) | 2022.10.01 |
---|---|
015. 디자인 패턴과 아키텍처 스타일 비교 (0) | 2022.10.01 |
013. 관점 지향 프로그래밍 (Aspect Oriented Programming) (0) | 2022.10.01 |
012. 객체 지향 (0) | 2022.10.01 |
011. 소프트웨어 역공학 (0) | 2022.10.01 |
댓글