본문 바로가기
TechNote/소프트웨어 공학(SW)

014. 디자인 패턴

by 도지웅 2022. 10. 1.
반응형

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)
특정언어로   패턴을 구현한 예제
실제로 사용되는 시스템에서 발견되는 패턴의 예제

 

반응형

댓글