디자인 패턴 사용 목적 쉽게 이해하기

2024. 9. 29. 00:09개발 관련

수업에서나 자격증에서나 디자인 패턴에 대해서 이야기 하지만 직접 사용해보지 않으면 디자인 패턴의 필요성에 대해서 완전히 이해하기는 어렵다.

사실 우리는 개발할 때 디자인 패턴을 몰라도 된다.

그리고 우리는 우리가  모르는 사이에 디자인 패턴의 형태로 구현을 하고 있었을지도 모른다.

 

그럼에도 왜 디자인 패턴을 알아야하는지 쉽게 이해해보자!

 

1. 디자인 패턴이란

특정 요리를 만들 때, 어떤 재료를 사용하고 어떤 절차로 요리해야 하는지 레시피가 있다.

스파게티를 만들 때, 면을 끓인 뒤 소스와 버무리는 단계는 대부분의 스파게티 요리에 공통적으로 적용된다.

 

마찬가지로 개발을 할 때 특정 상황에서는 어떻게 개발해야 하는지 정의한 것이 디자인 패턴이다.

 

2. 디자인 패턴을 사용하는 이유

1) 재사용 가능성과 효율성

    - 요리할 때 새로운 요리를 만들기 위해 매번 새로운 방법을 찾지 않고 기존 레시피를 활용하면 시간을 절약하고 더 나은 결과를 얻을 수 있다.

    - 디자인 패턴도 개발에서 사용할 수 있는 검증된 방법이기 때문에 개발자가 헤매지 않고 효율적으로 개발하는데 도움을 준다.

 

2) 원활한 소통

    - 레시피는 요리사들 간의 공통 언어가 된다. "Sauté(소량의 기름을 두르고 센불에 빠르게 볶는 조리법)로 조리하겠습니다."라고 하면 요리사들끼리는 빠른 소통이 가능해진다.

   - 디자인 패턴도 마찬가지로 개발자 간의 의사소통을 원활하게 해준다. "이 문제에 싱글톤 패턴(디자인 패턴 중 하나)을 적용했습니다." 라고 하면 싱글톤 패턴을 알고 있는 개발자끼리는 긴 설명 없이 한 번에 이해할 수 있다.

 

3. 디자인 패턴의 분류

디자인 패턴은 생성 패턴 / 구조 패턴 / 행동 패턴으로 나누어진다.

간단히 어떤 것들이 있는지 이름만 훑어보자!

 

1) 생성 패턴

    객체의 생성을 효율적으로 처리하고, 다양한 방식으로 객체를 만들 수 있게 도와준다.

  • 추상 팩토리 (Abstract Factory)
  • 빌더 (Builder)
  • 팩토리 메서드 (Factory Method)
  • 프로토타입 (Prototype)
  • 싱글턴 (Singleton)

2) 구조 패턴

    구조 패턴은 객체 간의 관계를 정의하고, 이를 통해 시스템의 구조를 효율적으로 설계할 수 있다.

  • 어댑터 (Adapter)
  • 브리지 (Bridge)
  • 컴포지트 (Composite)
  • 데코레이터 (Decorator)
  • 퍼사드 (facade)
  • 플라이웨이트 (Flyweight)
  • 프록시 (Proxy)

3) 행동 패턴

    객체가 어떻게 상호작용하는지를 정의하고, 각 객체의 역할과 책임을 명확히 할 수 있다.

  • 책임 연쇄 (Chain of Responsibility)
  • 커맨드 (Command)
  • 인터프리터 (Interpreter)
  • 이터레이터 (IIterator)
  • 미디에이터 (Mediator)
  • 메멘토 (Memento)
  • 옵저버 (Observer)
  • 스테이트 (State)
  • 스트래티지 (Strategy)
  • 템플릿 메서드 (Template Method)
  • 비지터 (Visitor)

 

4. 마무리

디자인 패턴은 개발을 할 때 발생하는 일반적인 문제들을 해결하는 검증된 방법이다.

빠른 문제 해결을 돕고, 팀원 간의 소통 능력을 키우기 위해서 디자인 패턴을 공부해보는 것도 좋겠다.

다음에는 각 패턴들에 대해서 자세히 알아보자!

 

 

참고) https://refactoring.guru/ko/design-patterns/what-is-pattern

 

'개발 관련' 카테고리의 다른 글

React의 ErrorBoundary 사용 꿀팁!  (4) 2024.09.25
TypeScript의 Object 타입 선언  (0) 2023.04.25
TypeScript의 Type선언  (0) 2023.04.25
React의 Suspense, ErrorBoundary  (0) 2023.04.20
React의 Router  (0) 2023.04.20