반응형
🎨 디자인 패턴이 뭘까? 🤔
코드를 짜다 보면 가끔 너무 거대한 하나의 덩어리가 되어버릴 때가 있다.
이걸 유지보수하려면 도대체 어디서부터 손을 대야 할까? 😵💫
이런 문제를 해결하기 위해 나온 개념이 바로 디자인 패턴(Design Pattern) 이다!
그리고 신기하게도 이 디자인 패턴이 여러 라이브러리나 프레임워크의 토대가 된다고 한다.
디자인 패턴을 배우면 얻을 수 있는 이점은 대략 두 가지로 정리할 수 있다.
- 여러 문제를 해결하는데 영감을 얻을 수 있다!
- 팀원들과의 의사소통이 빨라진다!
- "이거 싱글톤으로 하면 되겠네요" 한 마디
🎭 디자인 패턴의 종류
디자인 패턴은 크게 3가지 종류로 나뉜다.
- 생성 패턴 (Creational Pattern)
- 구조 패턴 (Structural Pattern)
- 행동 패턴 (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 |