[소프트웨어공학] 디자인 패턴

[소프트웨어공학] 디자인 패턴

사용 목적에 따라 생성 패턴, 구조 패턴, 행위 패턴으로 분류 된다.

생성 패턴

객체의 생성 과정에 관여하는 것
ex) 추상 팩토리(abstract factory), 빌더(builder), 프로토타입(prototype), 싱글톤(singleton)

구조 패턴

클래스나 객체의 합성에 관한 패턴
ex) Adapter, Bridge, Composite, Decorator, Proxy

행위 패턴

클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의
ex) chain of responsibility, command, iterator, mediator, memento, flyweight


팩토리 패턴 (factory pattern)

팩토리 메소드 패턴  

객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 즉, 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것

추상 팩토리 패턴

인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성


어댑터 패턴 (adapter pattern)

전기 콘센트를 보면 이해하기 쉽다. 한국의 표준 플러그를 인본에 전원 소켓에 바로 끼워줄수 없어 동그랑 모양을 일자로 바꿔주는 어댑터를 끼워주어야 한다.
한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다.
어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할 수 있다.
이렇게 함으로써 클라이언트와 구현된 인터페이스를 분리할 수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없다.

기존 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할
즉, 호환성이 없는 기존 클래스의 인터페이스를 변환해 재사용할 수 있도록 해준다.



퍼사드패턴(Facade pattern)

어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다.
퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다.

퍼사드 패턴은 단순화된 인터페이스를 통해 서브 시스템을 더 쉽게 사용할 수 있도록 하기 위한 용도로 쓰인다.

개발자가 사용해야 하는 서브시스템의 가장 앞쪽에 위치하면서 서브시스템에 있는 객체들을 사용할 수 있도록 인터페이스 역할을 하는 디자인 패턴


싱글턴 패턴 (Singleton Pattern)

해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴
클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다.
다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 해야 한다.

객체가 오직 한 개만 존재하도록 보장한다. 동일한 자원이나 데이터를 처리하는 객체가 불필요하게 여러 개 만들어질 필요가 없는 경우에 주로 사용한다.


스트래티지 패턴 (Strategy Pattern)

알고리즘군을 정의하고 각각 캡슐화하여 교환해서 사용할 수 있도록 만든다.
스트래티지 패턴을 활용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다.
상속을 받아 추상 메소드인 dispaly()를 각각 구현한다.
오리 어플리케이션 게임을 운영하는 회사를 다니면서 오리게임을 만든다고 가정할 때,
표준적인 객체지향 기법을 사용하여 Duck이라는 슈퍼클래스를 만든 다음 그 클래스를 확장하여 다른 종류의 오리를 만든다.



출처

댓글

이 블로그의 인기 게시물

[소프트웨어공학] NS(Nassi-Schneiderman) 차트

[컴퓨터네트워크] Telnet이란?

[Python] # -*- coding: utf-8 -*-를 쓰는 이유