경희대학교 이성원 교수님의 '오픈소스 SW 개발 방법 및 도구 수업'을 기반으로 본인이 이해한 바로 새롭게 정리한 글입니다.

Design Pattern이란 무엇인가?

Design Pattern이란, Product-ability와 Reliability를 높이기 위한 Re-usability이다.
여기서 Re-usability의 범위는 언어, 표준 라이브러리, 오픈 소스 등의 다양한 범위를 가진다.

Software Design Pattern

  • 일반적으로, 흔히 발생하는 문제를 주어진 맥락에서 해결할 수 있도록 하는 재사용가능한 해결책이다.

  • 디자인 패턴은, 사용자(개발자)가 application이나, system을 설계할 때 발생하는 문제를 해결하기 위한 최고의 방법들이다.

  • Design Pattern은 computer Programming에 있어서 구조화된 접근 방식이다.

Object-Oriented Design Pattern

클래스들과 Objects들 사이에 관계 혹은 상호작용들을 보여준다.

  • 여러 가지의 OOD Pattern

Adapter Pattern

  • Adapter design pattern은 다음과 같은 문제를 해결해준다. (예시)

    • client가 원하는 인터페이스를 어떻게 재사용할 수 있을까?
    • 인터페이스 작업을 어떻게 상호 연결할 수 있을까?
  • 한 클래스의 인터페이스(Adaptee)를 클라이언트에서 사용하고자하는 다른 인터페이스(Target)로 변환한다.

    • 이렇게 할 경우 인터페이스를 다시 만들 필요 없이 간단하게 전환하여 재사용이 가능하다.

    • Adapter Pattern 그림 (UML)

    • UML이란? (Unified Modeling Language)

      소프트웨어 집약 시스템의 구조와 행동을 시각적으로 명세화, 설계, 문서화하는 표준화된 범용 모델링 언어.

    • 선의 의미

Facade Pattern

  • 복잡한 클래스 라이브러리에 대해 사용하기 편하게 간편한 인터페이스(API)를 구성하기 위한 구조 패턴이다.

  • Facade Pattern은 다음과 같을 때 사용한다.

    • 시스템이 너무 복잡하다.
    • 간단한 인터페이스를 통해 복잡한 시스템을 접근하고자 한다.
    • 시스템을 사용하고 있는 외부와 결합도가 너무 높을 때 의존성 낮출 것이다.
  • Facade 장점

    • 하위 시스템의 복잡성에서 코드를 분리하여, 외부에서 시스템을 사용하기 간단해진다.

    • 하위 시스템 간의 의존 관계가 많을 경우 이를 감소시키고 의존성을 한 곳으로 모을 수 있다.

    • 복잡한 코드를 감춤으로써, 클라이언트가 시스템의 코드를 모르더라도 Facade 클래스만 이해하고 사용 가능하다.

Decorator Pattern

  • 대상 객체에 대한 기능 확장이나 변경이 필요할때 객체의 결합을 통해 서브클래싱을 사용할 수 있다.

  • 이러한 Decorator Pattern은 동적 할당하며, 실시간 동안 추가되거나 삭제되어야한다.

  • Decorator Pattern 장점

    • 서브클래스를 만들때보다 훨씬 더 유연하게 기능을 확장가능.
    • 객체를 여러 데코레이터로 래핑하여 여러 동작을 결합.
    • 컴파일 타임이 아닌 런타임에 동적으로 기능을 변경.

  • Decorator Pattern의 대표적 예시 : 게임

    • 무기 및 아이템 강화

    • 캐릭터 버프 및 상태 이상

      • 이러한 요소들을 통해, 각각의 클래스를 따로 구현할 필요성이 사라진다.

Design Pattern의 역사

1977~79년 Chritopher Alexander에 의해 창시되었다.

이후 1987년 Ward Cunningham과, Kent Beck이 OOPSLA 컨퍼런스에 5가지의 Design Pattern을 발표한다.

1994년 Gang of Four(GoF)이라는 네 명의 개발자가《Design Patterns: Elements of Reusable Object-Oriented Software》라는 책을 발간하며, 전 세계 개발자들의 '성경'이라 불린다.

profile
처음이고 서툴지만 방향을 잡아 노력하는 개발자

0개의 댓글