(GoF) Design Pattern 이란?

Jaeuk Oh·2021년 8월 6일
0

DesignPattern

목록 보기
1/2
post-thumbnail
  1. 디자인 패턴(Design Pattern)
  • 개념

    • 모듈의 세분화된 역할이나 모듈들 간의 인터페이스 구현 방식을 설계할때 참조할 수 있는 전형적인 해결 방식
      • 소프트웨어를 설계할 때 자주 발생하는 문제들에 대한 재사용 가능한 해결책
  • 디자인 패턴이 주는 이점

    • Don’t reinvent the wheel (http://egloos.zum.com/link/v/4188543)
      • 공통 언어 역할을 하게 되어, 경험많은 이들이 공통의 언어를 이용하면 그렇지 않을 경우보다 좀 더 효율적으로 협동 작업을 할 수 있게 된다
      • 불필요없는 논쟁을 줄일 수 있다.(이미 있는 것을 다시 개발 안 해도 됨)



  1. GoF 디자인 패턴
  • GoF란 1995년에 Addison-Wesley 에서 출간된 "Design Patterns of Reusable Object-Oriented Software"라는 책의 저자들을 의미한다. 4명의 저자들은 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissdes를 의미한다




  1. 생성 패턴(Creational Patterns)
  • 객체의 생성 과정에 관여를 해서 유연성을 높이고 코드의 유지/보수를 쉽게하기 위한 GoF 디자인 패턴이다.

  • 범위를 클래스와 객체로 나눈 기준

    • 범위가 클래스인 디자인 패턴은 객체가 아닌 클래스에 적용되는 범위를 가졌다.
      • 클래스와 서브 클래스 간의 관련성에 적용하는 디자인패턴이고, 상속과 관련되어 있다.
      • 예를 들어, 객체를 생성하는 책임의 일부를 서브클래스가 담당하게 맡긴다
    • 범위가 객체인 디자인 패턴은 클래스가 아닌 객체에 적용되는 범위를 가졌다.
      • 객체간의 관계 또는 관련성에 적용하는 디자인패턴이다.
      • 예를 들어, 객체를 생성하는 책임의 일부를 다른 객체에 위임한다
범위생성 패턴의도
클래스Factory Method객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내린다. (객체 생성을 서브클래스로 위임하여 캡슐화함)
객체Abstract Factory구체적인 클래스를 지정하지 않고 인터페이스를 통해 서로 연관되는 객체들을 그룹으로 생성해서 추상적으로 표현하는 디자인 패턴
객체Builder작게 분리된 인스턴스를 건축하듯이 조합하여 객체를 생성하는 디자인패턴
객체Prototype원본 객체를 복사함으로써 객체를 생성함
객체Singleton어떤 클래스의 인스턴스는 하나임을 보장하고 어디서든 참조할 수 있도록 함



  1. 구조 패턴(Structural Patterns)
  • 구조 패턴은 클래스나 객체들을 조합해서 더 큰 구조로 만들어주는 GoF 디자인 패턴이다.

  • 범위를 클래스와 객체로 나눈 기준

    • 범위가 클래스인 패턴은 객체가 아닌 클래스에 적용되는 범위를 가졌다.
      • 클래스와 서브 클래스 간의 관련성에 적용하는 디자인패턴이고, 상속과 관련되어 있다.
    • 범위가 객체인 패턴은 클래스가 아닌 객체에 적용되는 범위를 가졌다.
      • 객체간의 관계 또는 관련성에 적용하는 디자인패턴이다.
범위구조 패턴의미
클래스/객체Adapter클래스의 인터페이스를 다른 인터페이스로 변환하여 다른 클래스가 이용할 수 있도록 하고, 서로 다른 인터페이스를 가진 두 클래스를 Adapter 클래스로 인터페이스를 통일 시켜 사용하는 방법이다. 호환되지 않는 인터페이스 때문에 함께 사용할 수 없는 클래스의 인터페이스를 변환하여 함께 작동할 수 있게 해주는 패턴이라고 할 수 있다.
객체Bridge구현부에서 추상층을 분리하여 각자 독립적으로 확장할 수 있게 함
객체Composite객체들의 관계를 트리 구조로 구성하여 복합 객체와 단일 객체를 구분없이 다룸
객체Decorator주어진 상황 및 용도에 따라 어떤 객체에 다른 객체를 덧붙이는 방식
객체Facade서브시스템에 있는 인터페이스 집합에 대해 하나의 통합된 인터페이스(Wrapper) 제공
객체Flyweight크기가 작은 여러 개의 객체를 매번 생성하지 않고 가능한 한 공유할 수 있도록 하여 메모리를 절약함
객체Proxy접근이 어려운 객체로의 접근을 제어하기 위해 객체의 Surrogate나 Placeholder를 제공



  1. 행위 패턴(Behavioral Patternss)
  • 행위 패턴은 클래스나 객체들이 서로 상호작용하는 방법, 어떤 작업이나 알고리즘을 적합한 객체에 할당하는 것을 정의하는 패턴이다

    • 즉, 객체와 클래스의 교류 방법에 대해 정의하는 것이다.
  • 범위를 클래스와 객체로 나눈 기준

    • 범위가 클래스인 패턴은 객체가 아닌 클래스에 적용되는 범위를 가졌다.
      • 클래스와 서브 클래스 간의 관련성에 적용하는 디자인패턴이고, 상속과 관련되어 있다.
    • 범위가 객체인 패턴은 클래스가 아닌 객체에 적용되는 범위를 가졌다.
      • 객체간의 관계 또는 관련성에 적용하는 디자인패턴이다.
범위행위 패턴의미
클래스Interpreter문법 규칙을 클래스화한 구조를 갖는 SQL 언어나 통신 프로토콜 같은 것을 개발할 때 사용한다.
클래스Template Method상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정된다.
객체Chain of Responsibility책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조이다.
객체Command명령어를 각각 구현하는 것보다는 하나의 추상 클래스에 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행한다.
객체Iterator반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 메서드를 이용해 자료구조를 활용할 수 있도록 해준다.
객체Mediator클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리한다.
객체MementoCtrl + z 와 같은 undo 기능 개발할 때 유용한 디자인패턴. 클래스 설계 관점에서 객체의 정보를 저장한다.
객체Observer어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해준다.
객체State동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용한다.
객체Strategy알고리즘 군을 정의하고 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다.
객체Visitor각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 visitor 클래스로 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행한다.

0개의 댓글