디자인 패턴(Design Pattern)은 소프트웨어 개발에서 **반복적으로 발생하는 문제를 해결하기 위한 표준화된 설계 방법**입니다. 올바른 디자인 패턴을 사용하면 유지보수성과 확장성이 뛰어난 코드를 작성할 수 있습니다.
1. 디자인 패턴이란?
디자인 패턴은 소프트웨어 설계의 모범 사례(Best Practice)를 정의한 것입니다.
📌 디자인 패턴의 장점
- 코드의 **재사용성** 증가
- **유지보수성**이 뛰어난 코드 작성 가능
- 개발자가 공통적인 설계를 이해하는 데 도움
- 소프트웨어 설계에서 **유연성과 확장성** 향상
2. 디자인 패턴의 주요 유형
디자인 패턴은 크게 **세 가지**로 분류됩니다.
유형 | 설명 | 대표 패턴 |
---|---|---|
생성 패턴 | 객체의 생성 과정을 단순화 | 싱글턴, 팩토리, 빌더 |
구조 패턴 | 클래스와 객체 간 관계를 최적화 | 어댑터, 데코레이터, 프록시 |
행동 패턴 | 객체 간의 상호작용을 정의 | 옵저버, 전략, 상태 |
3. 대표적인 디자인 패턴과 예제
📌 1. 싱글턴 패턴 (Singleton Pattern)
싱글턴 패턴은 **하나의 객체만 생성하도록 제한하는 패턴**입니다.
class Singleton:
_instance = None
@staticmethod
def get_instance():
if Singleton._instance is None:
Singleton._instance = Singleton()
return Singleton._instance
obj1 = Singleton.get_instance()
obj2 = Singleton.get_instance()
print(obj1 is obj2) # 출력: True
📌 2. 팩토리 패턴 (Factory Pattern)
팩토리 패턴은 **객체 생성을 위한 인터페이스를 제공하는 패턴**입니다.
class Car:
def drive(self):
pass
class Tesla(Car):
def drive(self):
return "Tesla가 주행 중"
class BMW(Car):
def drive(self):
return "BMW가 주행 중"
class CarFactory:
@staticmethod
def get_car(brand):
if brand == "Tesla":
return Tesla()
elif brand == "BMW":
return BMW()
car = CarFactory.get_car("Tesla")
print(car.drive()) # 출력: Tesla가 주행 중
📌 3. 옵저버 패턴 (Observer Pattern)
옵저버 패턴은 **객체 간 1:N 관계를 정의하여 변경 사항을 자동으로 반영하는 패턴**입니다.
class Observer:
def update(self, message):
pass
class User(Observer):
def __init__(self, name):
self.name = name
def update(self, message):
print(f"{self.name} received: {message}")
class Channel:
def __init__(self):
self.subscribers = []
def subscribe(self, user):
self.subscribers.append(user)
def notify(self, message):
for user in self.subscribers:
user.update(message)
channel = Channel()
user1 = User("Alice")
user2 = User("Bob")
channel.subscribe(user1)
channel.subscribe(user2)
channel.notify("새로운 영상이 업로드되었습니다!")
# 출력: Alice received: 새로운 영상이 업로드되었습니다!
# 출력: Bob received: 새로운 영상이 업로드되었습니다!
📌 마무리
디자인 패턴은 소프트웨어 개발에서 코드의 **재사용성과 유지보수성**을 높여줍니다. 다양한 디자인 패턴을 익히고 실전에서 활용하면 더욱 효율적인 프로그램을 개발할 수 있습니다.