[정보처리기사 실기] 디자인 패턴(생성, 구조, 행위)

민영·2023년 4월 18일
0

정보처리기사

목록 보기
4/4
post-thumbnail

디자인 패턴

생성 패턴

: 클래스 정의와 객체 생성 방식을 구조화, 캡슐화한 방법을 제시한다. 객체의 생성과 참조 과정을 추상화함으로써 시스템을 개발할 때 부담을 덜어준다.

  • Abstraction factory: 여러개의 연관된 서브 클래스를 특정 그룹으로 묶어 한번에 수정할 수 있도록 만든 패턴 (추상 팩토리 패턴은 팩토리 메소드 패턴을 확장한 캡슐화 방식)

  • Factory method: 서브 클래스가 인스턴스를 결정하도록 하고 책임을 위임하는 패턴

    Abstraction factory vs Factory method
    Factory method하나의 메소드가 여러 종류의 객체를 생성하는 것이고, Abstraction factory같은 종류의 여러 개의 객체를 생성할 수 있는 클래스를 생성하는 것이다.

  • Builder: 객체 생성에 있어서 복잡한 과정들을 분리해서 생산 단계를 캡슐화하여 구축 공정을 동일하게 이용하도록 하는 패턴 (복잡한 객체를 단계적으로 생성)

  • Prototype: 원본 객체를 복제하여 중복 객체를 생성하는 패턴 (비용 절감 효과)

  • Singleton: 한 클래스에 한 객체만 존재하도록 제한하는 패턴 (Static으로 선언)

구조 패턴

: 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴이다. 복잡한 형태의 구조를 갖는 시스템을 개발하기 쉽게 만들어주는 패턴이다.

  • Adaptor: 호환성이 없는 인터페이스 때문에 함께 사용할 수 없는 클래스를 함께 사용하도록 하는 패턴
    ex) 국내 가전제품을 외국에서 사용할 때, 동일한 전압을 사용하지 않아서 변환코드가 필요한 경우에 Adaptor 구조 패턴을 사용함
  • Bridge: 기능 클래스와 구현 클래스를 연결하고, 구현 클래스에서 추상 계층을 분리하여 결합도를 낮추고 독립적으로 변형할 수 있도록 해주는 패턴
  • Composite: 단일 객체와 복합 객체가 클라이언트에서 동일하게 사용되도록 해주는 패턴
  • Decorator: 기존 객체의 메소드에 새로운 독립적인 기능을 추가해서 확장하도록 하는 패턴
  • Facade: Facade 인터페이스를 제공하여 Facade 객체를 통해서만 모든 관계가 이루어질 수 있도록 인터페이스를 단순화한다. (클래스 간의 의존관계 줄어들고 복잡성도 낮아짐)
  • Flyweight: 유사한 작은 객체를 공유해서 사용함으로써 메모리를 절약
  • Proxy: 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 어려운 객체와 연결하려는 다른 객체와 인터페이스 임무를 수행하는 패턴

행위 패턴

: 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 패턴이다.

  • Chain of Responsibility: 요청을 처리할 수 있는 객체를 여러 개로 두어서 요청하는 객체와 처리하는 객체 사이의 결합도를 없앤다. 요청을 처리할 수 있는 객체를 만날 때까지 객체 고리(chain)을 따라서 요청을 전달한다.
  • Command: 여러 기능을 실행할 수 있도록 재사용성이 높은 클래스를 설계하는 패턴이다. (매개변수를 사용하여 여러 요구사항을 처리할 수 있음)
  • Interpreter: 언어에 따라서 문법에 대한 표현을 정의한다.
  • Iterator(반복자): 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 하는 패턴이다.
  • Mediator(중재자): 객체간의 상호작용을 캡슐화하여 복잡성을 줄이기 위해 사용하는 패턴이다.
  • Memento: 객체의 상태를 저장해두었다가 복원해야 할 경우 사용하는 패턴이다. (캡슐화 사용)
  • Observer: 객체 사이에 일대다 종속성을 정의하고 한 객체의 상태가 변하면 종속된 다른 객체에 통보를 하고 자동으로 수정이 일어나게 한다.
  • State: 객체의 내부 상태에 따라 행위를 변경할 수 있게 한다. (특정 메소드가 객체의 상태에 따라 다른 기능을 수행함)
  • Strategy: 클래스별로 캡슐화되어 있는 객체들을 교체할 수 있도록 함으로써 같은 작업을 다른 알고리즘으로 사용할 수 있도록 하는 패턴이다.
  • Template method: 작업의 일부분을 캡슐화해서 전체 일을 수행하는 구조는 그대로 유지하면서 특정 부분을 바꾸는 패턴이다. (알고리즘의 각 단계 처리를 서브 클래스에서 재정의할 수 있게 함)
  • Visitor: 기존 객체의 구조를 수정하지 않고 새로운 기능을 추가할 수 있는 패턴이다.

기출 문제

( 1 )은/는 기능을 처리하는 클래스와 구현을 담당하는 추상 클래스로 구별한다.
구현뿐 아니라 추상화도 독립적 변경이 필요할 때 브리지 패턴을 사용한다.
기존 시스템에 부수적인 새로운 기능들을 지속적으로 추가할 때 사용하면 유용하며,
새로운 인터페이스를 정의하여 기존 프로그램의 변경 없이 기능을 확장할 수 있다.
-> Bridge

( 2 )은/는 한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달해주는 패턴이다.
일대다 관계를 가지며, 주로 분산된 시스템 간에 이벤트를 생성·발행(Publish)하고, 이를 수신(Subscribe)해야 할 때 이용한다.
-> Observer

profile
그날의 기록

0개의 댓글