본문 바로가기
iOS/Design Pattern

Design Pattern - Introduction

by HaningYa 2020. 7. 14.
728x90

디자인 패턴은

Design Patterns: Elements of Reusable, Object-Oriented Software 라는 책에서 처음 다뤄졌다.

흔히 발생하는 소프트웨어 개발 문제에 대한 재사용 가능한 템플릿 솔루션을 다웠다.

디자인 패턴은 어떤 특정 상황이 아닌, 문제 상황에서 해결을 위해 차용할 수 있는 솔루션인 것이다.

  • not concrete implementation (정확히 정해진 완벽한? 규격? 이 없다)
    -> serve as starting points for writing code (디자인 패턴을 뼈대로 시작하는 것) 

디자인 패턴 3가지 종류

  1. Structural design pattern: 큰 구조를 위해 어떻게 object가 결합 되는지 설명한다. 예를들어 MVC, MVVM, Facade 가 있다.
  2. Behavioral design pattern: Object간에 어떻게 통신하는지 설명한다. 예를들어 Delegation, Strategy and Observer가 있다.
  3. Creational design pattern: Object를 어떻게 만들고 초기화 하는지 설명한다. 예를들어 Builder, Singleton, Prototype 이 있다.

* MVVM 이나 MVC는 앱 전체 또는 서브 시스템의 아키텍처를 이루기 때문에 아키텍처 패턴으로 볼 수 도 있다. 그래서 design pattern 보다는 넓은 scope 이다. 근데 componet단으로 생각했을때 MVC 나 MVVM 도 다른 종류의 디자인 패턴과 함께 사용될 수 있기 때문에 디자인 패턴 영역에 포함시켰다고 한다. (책에서)


디자인 패턴의 한계

단지 디자인 패턴을 알고 적용한다고 well-architected software를 만든다는 뜻은 아니다. 상황에 맞는 적절한 패턴을 적용하는 것이 중요하다.

  1. 디자인 패턴을 과도하게 적용하면 프로젝트가 복잡해질 수도 있다.
  2. Swift와 같은 현대의 high-level language에 몇몇의 디자인 패턴은 불필요할 수도 있다.

디자인 패턴의 장점

  1. 디자인 패턴은 공통의 언어를 만들어 준다. (의사소통 원활)
  2. 새로운 개발자가 프로젝트에 onboarding하는걸 쉽게 만들어 준다.
  3. 더 나은 사람으로 만들어 준다? (self-imporvement?)
  4. 디자인 패턴을 알면 코드간 유사성을 찾을 수 있게 해준다. (패턴 찾기 쉽게 해준다.)

요약하면

  1. 디자인 패턴은 완벽한 구현이 아닌 코드를 작성하는데 기초가 되는 아이디어 이다.
  2. 디자인 패턴은 가독성과 유지보수가 좋은 코드를 작성하는 방법들이 하나씩 모여 완성된 집합이다.
  3. structural, behavior, creational 의 3가지 디자인 패턴 타입이 있다
  4. 디자인 패턴에 대해 장점도 있고 단점도 있지만 아는게 중요하다.

학습할 디자인 패턴 목록

기초

  1. MVC
  2. Delegation
  3. Strategy
  4. Singleton
  5. Memento
  6. Observer
  7. Builder

중급

  1. MVVM
  2. Factory
  3. Adapter
  4. Iterator
  5. Prototype
  6. State
  7. Multicast Delegate
  8. Facade

고급

  1. Flyweight
  2. Mediator
  3. Composite
  4. Command
  5. Chain-of-Responsibility
  6. Coordinator

 

 

 

728x90

'iOS > Design Pattern' 카테고리의 다른 글

Design Pattern - Singleton Pattern  (0) 2020.08.09
Design Pattern - Strategy Pattern  (0) 2020.08.07
Design Pattern - Delegation Pattern  (0) 2020.08.06
Design Pattern - MVC  (0) 2020.07.14
Design Pattern - Class Diagram  (0) 2020.07.14

댓글