CS 공부

# 디자인 패턴 소개

박태정 입니다. 2025. 2. 17. 16:41
반응형

🎨 디자인 패턴이 뭘까? 🤔

코드를 짜다 보면 가끔 너무 거대한 하나의 덩어리가 되어버릴 때가 있다.
이걸 유지보수하려면 도대체 어디서부터 손을 대야 할까? 😵‍💫
이런 문제를 해결하기 위해 나온 개념이 바로 디자인 패턴(Design Pattern) 이다!

그리고 신기하게도 이 디자인 패턴이 여러 라이브러리나 프레임워크의 토대가 된다고 한다.

디자인 패턴을 배우면 얻을 수 있는 이점은 대략 두 가지로 정리할 수 있다.

  1. 여러 문제를 해결하는데 영감을 얻을 수 있다!
  2. 팀원들과의 의사소통이 빨라진다!
    • "이거 싱글톤으로 하면 되겠네요" 한 마디

🎭 디자인 패턴의 종류

디자인 패턴은 크게 3가지 종류로 나뉜다.

  1. 생성 패턴 (Creational Pattern)
  2. 구조 패턴 (Structural Pattern)
  3. 행동 패턴 (Behavioral Pattern)

🏗️ 1. 생성 패턴 - 객체를 어떻게 만들까?

객체를 생성하는 방법을 다룬 패턴이다.
어떤 방식으로 객체를 만들지 정하면 나중에 확장하기가 편해진다고 한다.

대표적인 패턴들:

  • 싱글톤(Singleton): "딱 하나만 존재하는 객체"가 필요할 때
  • 팩토리(Factory): 객체를 직접 만들지 않고, 공장에서 찍어내듯이 생성하는 방법
  • 추상 팩토리(Abstract Factory): 여러 팩토리를 한데 묶어서 일관되게 객체를 생성
  • 빌더(Builder): 복잡한 객체를 단계별로 생성 (ex. 햄버거 조립하는 느낌?)
  • 프로토타입(Prototype): 기존 객체를 복사해서 새 객체를 생성

🏛️ 2. 구조 패턴 - 효율적인 구조 만들기

객체나 클래스를 더 유연하고 효율적으로 구성하는 패턴이다.
"어떻게 객체들을 조합해서 유지보수하기 쉽게 만들 것인가?"가 핵심!

대표적인 패턴들:

  • 프록시(Proxy): 다른 객체를 감싸서 대리 역할을 함 (ex. VPN 같은 느낌?)
  • 어댑터(Adapter): 서로 다른 인터페이스를 변환해서 호환되도록 만듦 (ex. 110V ↔ 220V 변환기)
  • 브리지(Bridge): 기능과 구현을 분리해서 독립적으로 변경할 수 있도록 함
  • 복합체(Composite): 객체들을 트리 구조로 만들어 계층적으로 관리
  • 데코레이터(Decorator): 기존 객체에 새로운 기능을 동적으로 추가
  • 퍼사드(Facade): 복잡한 시스템을 단순한 인터페이스로 감싸서 제공
  • 플라이웨이트(Flyweight): 메모리를 절약하기 위해 공유 가능한 객체를 활용

🎭 3. 행동 패턴 - 객체들의 상호작용

객체나 클래스 간의 알고리즘, 책임 할당을 다루는 패턴이다.
즉, "객체들이 어떻게 소통하고 책임을 나눌 것인가?"에 대한 고민!

대표적인 패턴들:

  • 이터레이터(Iterator): 컬렉션 요소를 순차적으로 접근하는 방법 제공
  • 옵저버(Observer): 한 객체의 상태가 변경되면 자동으로 다른 객체들에게 알림
  • 전략(Strategy): 알고리즘을 캡슐화해서 필요할 때 교체 가능
  • 책임 연쇄(Chain of Responsibility): 요청을 처리할 수 있는 객체가 여러 개 있을 때, 순차적으로 넘김
  • 커맨드(Command): 요청을 객체로 캡슐화해서 실행을 나중으로 미룰 수 있음
  • 중재자(Mediator): 객체들 간의 복잡한 상호작용을 중앙에서 관리
  • 메멘토(Memento): 객체 상태를 저장하고, 나중에 복원 가능
  • 상태(State): 객체의 상태에 따라 동작이 달라짐
  • 템플릿 메서드(Template Method): 알고리즘의 뼈대를 정의하고, 세부 사항을 서브클래스에서 구현
  • 비지터(Visitor): 객체 구조와 연산을 분리

🤔 결론: 디자인 패턴, 꼭 배워야 할까?

처음엔 "디자인 패턴을 꼭 알아야 할까?" 하는 의문이 들었는데,
배워보니 결국 효율적이고 유지보수하기 쉬운 코드를 만들기 위해 필요한 개념이라는 걸 알게 됐다.

특히 협업할 때 패턴을 알면 "이거 팩토리 패턴으로 만들자" 한 마디만 해도
팀원들이 바로 이해할 수 있으니까 의사소통이 훨씬 빨라진다! 💡

그렇다면 이제 남은 건? 직접 코드로 구현해보는 것!
설명만 보고 끝내면 진짜 내 것이 되지 않으니까,
각 패턴을 하나씩 코드로 만들어보면서 익혀봐야겠다! 🚀

반응형

'CS 공부' 카테고리의 다른 글

# 싱글톤 패턴  (0) 2025.02.17
# 라이브러리와 프레임워크  (0) 2025.02.17
# JIT 컴파일러  (1) 2025.02.16
# 오버헤드와 가비지 컬렉션  (1) 2025.02.16
# 추상화란 무엇인가?  (0) 2025.02.16