[파이썬] 행위 패턴의 종류와 사용법
행위 패턴은 소프트웨어 디자인 패턴의 한 종류로, 객체 간의 상호작용을 구조화하는 방법을 제공합니다. 행위 패턴은 각 객체의 역할과 책임을 분리하여 유연하고 재사용 가능한 코드를 작성하는 데 도움을 줍니다.
이번 글에서는 행위 패턴의 종류와 각각의 사용법을 파이썬 예제 코드와 함께 알아보겠습니다.
1. 단일체 (Singleton) 패턴
단일체 패턴은 오직 하나의 인스턴스만 생성하여 그 인스턴스를 공유하고자 할 때 사용하는 패턴입니다. 이는 전역 변수 사용을 통해 구현될 수 있지만, 단일체 패턴을 사용하면 클래스 내부에서 인스턴스 생성과 관리를 담당하므로 전역 변수의 단점을 방지할 수 있습니다.
class Singleton:
_instance = None
@staticmethod
def get_instance():
if not Singleton._instance:
Singleton._instance = Singleton()
return Singleton._instance
# 사용 예시
instance1 = Singleton.get_instance()
instance2 = Singleton.get_instance()
print(instance1 is instance2) # True
2. 전략 (Strategy) 패턴
전략 패턴은 알고리즘을 독립적으로 캡슐화하여 동적으로 바꿀 수 있는 패턴입니다. 이는 객체가 실행 시점에 알고리즘을 선택할 수 있게 하여 유연성을 제공합니다.
class Strategy:
def execute(self):
pass
class StrategyA(Strategy):
def execute(self):
print("Executing strategy A")
class StrategyB(Strategy):
def execute(self):
print("Executing strategy B")
# 사용 예시
strategy_a = StrategyA()
strategy_b = StrategyB()
strategy_a.execute() # Executing strategy A
strategy_b.execute() # Executing strategy B
3. 옵서버 (Observer) 패턴
옵서버 패턴은 객체 간의 일대다 의존 관계를 구축하여 한 객체의 상태 변화에 따라 다른 객체들이 자동으로 갱신될 수 있게 하는 패턴입니다. 이는 이벤트 처리나 MVC (모델-뷰-컨트롤러) 패턴에서 자주 사용됩니다.
class Observer:
def notify(self, event):
pass
class Subject:
def __init__(self):
self.observers = []
def attach(self, observer):
self.observers.append(observer)
def detach(self, observer):
self.observers.remove(observer)
def notify_observers(self, event):
for observer in self.observers:
observer.notify(event)
# 사용 예시
class EventObserver(Observer):
def notify(self, event):
print("Event occurred:", event)
subject = Subject()
observer = EventObserver()
subject.attach(observer)
subject.notify_observers("Something happened") # Event occurred: Something happened
subject.detach(observer)
마무리
이 글에서는 행위 패턴의 종류와 사용법에 대해 알아보았습니다. 각각의 패턴은 여러 상황에서 유용하게 사용될 수 있으며, 코드의 유연성과 재사용성을 높일 수 있습니다.
더 많은 행위 패턴과 해당 사용법에 대해 학습하고 실제 프로젝트에 적용해보는 것을 추천합니다.