티스토리 뷰

반응형

안녕하세요 Pingu입니다.🐧

 

오늘부터 객체 지향 소프트웨어를 개발을 할 때 발생하는 문제의 해결방법을 생각할 때 다양한 방법을 떠올릴 수 있도록 디자인 패턴을 공부하려고 합니다.

 

공부에 참고할 책은 1994년에 쓰인 Design Patterns: Elements of Reusable Object-Oriented Software 라는 책과 Raywenderlich 사이트의 Design Patterns by Tutorials라는 책입니다.

전자는 거의 30년 전에 나온 책인데, 책에 있는 디자인 패턴들이 아직까지도 쓰인다니 정말 대단한 거 같아요.

 

공부 방법은 책으로 개념을 공부한 뒤, 다양한 디자인 패턴을 Swift예제로 구현해 볼 계획입니다!

 

그럼 이번 글에서는 디자인 패턴이 뭔지, 어떠한 디자인 패턴들이 존재하는지에 대해 알아보도록 하겠습니다.

디자인 패턴 이란?

객체 지향 소프트웨어를 설계하고 재사용 가능하게 만드는 것은 어렵습니다. 클래스들 간의 관계를 적절하게 만들어서 이걸 수행해야 하는데, 당장 해결할 문제에만 집중하다 보면 나중에 새로운 문제가 발생했을 때 코드를 많이 수정해야 할 수도 있어요. 그래서 다양한 문제를 겪은 개발자들이 객체 지향 소프트웨어를 개발할 때 많이 겪는 문제를 해결하기 위해 사용한 경험을 디자인 패턴으로 만들었고, 이를 공부하면 보다 좋은 해결방법이 될 수도 있습니다.

 

디자인 패턴을 사용하면 아키텍처를 좀 더 쉽게 재사용 할 수 있으며 협업을 할 때에도 신입 개발자가 더 쉽게 코드를 이해할 수 있습니다. 또한 유지보수도 좀 더 쉽게 할 수 있다고 해요.

 

한 문장으로 정리하면 "디자인 패턴은 소프트웨어를 개발할 때 발생하는 다양한 문제에 대한 재사용 가능한 템플릿 해결방법!" 이라고 할 수 있겠습니다. 즉 어떤 실질적인 코드가 아닌 아이디어라고 할 수 있어요. 이러한 디자인 패턴에는 일반적으로 네 가지 요소가 있습니다.

  1. 패턴 이름
    • 해결할 문제, 해결 방법, 결과를 설명하기 위한 것인데요, 쉽게 말해서 그냥 이름입니다. 이름이 있어야 해당 디자인을 설명하고 공유하기 편하기 때문이죠
  2. 해결할 문제
    • 해당 패턴이 어떤 문제를 해결할 때 사용할 것인지에 대한 부분입니다. 
  3. 해결 방법
    • 디자인 패턴은 다양한 상황에 적용될 수 있는 템플릿과 같기 때문에 해결 방법은 특정 디자인이나 구현을 설명하지는 않고, 추상적인 설명과 요소를 제공하여 해결 방법을 제시하게 됩니다.
  4. 결과
    • 디자인 패턴을 사용했으니 결과가 있어야겠죠? 소프트웨어에서는 동일한 기능을 구현할 때 메모리, 속도 등을 비교하여 어느 코드가 더 나은 성능을 보이는지 볼 수 있습니다. 또한 디자인 패턴을 사용하는 이유인 재사용성도 평가 항목에 포함됩니다.

어떻게 보면 당연한 4가지 요소 같죠?

 

디자인 패턴의 종류

이제 디자인 패턴이 어떤 것인지에 대해 알았으니, 디자인 패턴의 종류에 알아보겠습니다. 디자인 패턴에는 목적에 따라 크게 세 가지 종류가 있습니다.

  1. Structural Design Pattern (구조 패턴)
    • 큰 구조를 만들기 위해 객체를 구성하고 결합하는 방법을 말합니다. Adapter, Bridge 패턴 등이 존재한다고 합니다.
    • 구조 패턴에는 iOS 개발을 공부했다면 한 번쯤은 들어봤을 법한 유명한 MVC(Model-View-Controller), MVVM(Model-View ViewModel)등도 포함될 수 있다고는 하는데요, 여기에는 논쟁이 많다고 해요. MVVM이나 MVC는 디자인 패턴보다는 아키텍처 패턴에 가깝다는 의견도 있어서 라고 합니다.
  2. Behavioral Design Pattern (행동 패턴)
    • 객체들이 서로 통신하는 방법입니다. 제가 이 패턴을 사용한 경험으로는 Delegation, Observer 패턴 정도가 떠오르네요!
  3. Creational Design Pattern (생성 패턴)
    • 객체를 생성하거나 인스턴스화 하는 방법입니다. 제가 지금까지 사용해본 패턴으로는 Singleton 패턴 정도가 떠오르는 거 같아요!

그럼 3가지 패턴에는 어떤 패턴들이 존재하는지 1994년에 쓰인 책에 있는 내용을 표로 한 번 만들어보겠습니다.

Creational Pattern (생성 패턴) Structual Pattern (구조 패턴) Behavioral Pattern (행동 패턴)
Abstract Factory
Builder
Factory Method
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain Of Responsibilty
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor

디자인 패턴의 장단점

물론 위의 디자인 패턴들을 모두 알면 좋겠지만 안다고 해서 좋은 코드를 만들 수 있는 것은 아닙니다. 또한 위에 있는 패턴들 외에도 더 많은 디자인 패턴이 있기 때문에 각 패턴들이 언제 사용되면 좋은지를 아는 것이 중요합니다. 또한 디자인 패턴을 과도하게 사용하면 프로젝트가 복잡해질 수 있기 때문에 디자인 패턴을 적용하기 전에 해결할 문제를 명확하게 하는 것도 중요합니다!

 

디자인 패턴을 사용하면 협업을 할 때 해결방법을 디자인 패턴으로 제시하면 설명이 간단해지고 새로운 개발자가 합류해도 기존 프로젝트를 이해하는데 어려움이 없도록 해줍니다.

 

정리

이번 글에서는 이렇게 디자인 패턴이 무엇인지 어떤 패턴들이 존재하는지, 장단점은 무엇인지에 대해 알아봤습니다. 다음 글부터 아까 본 표에 있는 패턴들을 하나씩 공부해보도록 하겠습니다!

 

감사합니다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함