(1) 디자인 패턴의 개요
[1] UML과 같은 일종의 설계기법이며, UML이 전체설계도면을 설계한다면, Design Pattern은 설계방법을 제시한다.
[2] 객체지향 소프트웨어 시스템 디자인 과정에서 자주 접하게 되는 디자인 문제에 대한 기존의 시스템에 적용되어 검증된 해법의 재사용성을 높여 쉽게 적용할 수 있도록 하는 방법론이다.
[3] 패턴은 여러 가지 상황에 적용될 수 있는 탬플리소가 같은 것이며, 문제에 대한 설계를 추상적으로 표현한 것이다.
[4] 패턴(Pattern)은 90년대 초반 Erich Gamma에 의해 첫 소개된 이후 95년에 Gamma, Helm, John, Vlissides 네 사람에 의해 집대성되었고, 디자인패턴(Design Pattern)이라는 것이 널리 알려졌다.
(2) 디자인 패턴의 특성
[1] 객체지향 방법론의 가장 큰 장점인 재사용성과 모듈성을 극대화시켜서 이를 적용하면 시스템 개발은 물론 유지보수에도 큰 효과가 있다.
[2] 디자인 패턴은 개개의 클래스, 인스턴스, 컴포턴트들의 상위단계인 추상개념을 확인하고 특징짓는다.
[3] 상위단계에서 적용될 수 있는 개념이며, 시스템 구조를 재사용하기 쉽게 만들 수 있다.
(3) 디자인 패턴의 장점
[1] 많은 전문가의 경험과 노하우를 별다른 시행착오 없이 얻을 수 있다.
[2] 실질적 설계에 도움이 된다.
[3] 쉽고 정확하게 설계내용을 다른 사람과 공유 가능하다.
[4] 기존 시스템이 어떤 디자인 패턴을 사용하고 있는 지를 기술함으로써 쉽고 간단하게 시스템을 이해할 수 있다.
(4) 디자인 패턴의 분류와 종류
1) 생성관련 패턴(Creational Pattern)
[1] 객체 인스턴스 생성을 위한 패턴으로, 클라이언트와 그 클라이언트에서 생성해야 할 객체 인스턴스사이의 연결을 끊어주는 패턴이다.
[2] 객체의 생성방식을 결정하는 데 포괄적인 솔류션을 제공하는 패턴이다.
[3] 종류 : 빌더(Builder), 프로토타입(Prototype), ⭐️ 싱글턴(Singleton), 추상 팩토리(Abstract Factory), 팩토리 메소드(Factory Method) 패턴등
싱글턴 -> 객체 생성 제한
2) 구조화 패턴(Structural Pattern)
[1] 다른 기능을 가진 객체가 협력을 통해 어떤 역활을 수행할 때, 객체를 조직화시키는 일반적인 방식을 제시한다.
[2] 클래스와 객체가 보다 대규모 구조로 구성되는 방법에 대한 해결안을 제시한다.
[3] 종류 : 브리지(Bridge), 데코레이터(Decorator), 컴포지트(Composite), 프록시(Proxy), 어댑터(Adapter), ⭐️ 퍼케이드(Facade), 플라이웨이트(Flyweight), 다이나믹 링키지(Dynamic Linkage), 가상 프록시 패턴 등이 있다.
퍼샤드 -> 서브 시스템
3) 행위 패턴(Behavioral Patterns)
[1] 객체의 행위를 조직화(Organize), 관리(manage), 연합(combine), 하는 데 사용되는 패턴이다.
[2] 객체간의 기능을 배분하는 일과 같은 알고리즘 수행에 주로 이용된다.
[3] 종류 : 비지터(Visitor), 탬플릿 메소드(Template Method), 커맨드(Command), 이터레이터(Iterator), 옵저버(Observer), 스테이트(State), 스트래티지(Stratagy), 메멘토(Memento), Chain of Responsibility, 인터프리터(Interpreter), 미디에이터(Mediator)패턴 등이 있다.
옵저버 패턴 -> 일대다
인터페이스 요구사항이란 목표 시스템과 외부 환경이 상호 작용할 수 있도록 연결하기 위한 조건이나 특성 및 규약 등에 대한 요건을 기술한 것이다.
조직의 내외부에 존재하는 여러 시스템들의 상호 윤영을 통해 작용할 수 있도록 접속 방법이나 규칙이 내외부 인터페이스라 할 수 있다.
(1) 외부 인터페이스 요구사항
[1] 사용자 인터페이스
[2] 하드웨어 인터페이스(Hardware Interface)
[3] 소프트웨어 인터페이스(Software Interface)
[4] 통신 인터페이스(CommunicationsInterface)
(2) 내부 인터페이스 요구사항
[1] 시스템 초기화 함수 제공
[2] 시스템 시작시 관련 변수 초기화 하함수
[3] 새로운 타입의 폰트 추가 용이
[4] 추가 용이를 위하여 아키텍처 패턴 사용 구현