Exist Technote
[Python] Chaining Method Pattern (체이닝 메소드 패턴) 본문
Design Pattern/Behavioral
[Python] Chaining Method Pattern (체이닝 메소드 패턴)
by_Exist 2020. 10. 14. 17:03Chaining Method란?
- 메서드가 객체를 반환하여 연쇄적으로 메소드를 이어 동작시킬 수 있는 패턴.
예제
- 원펀맨 훈련법
class Person:
def __init__(self, start=None, end=None):
self.actions = []
def traning(self, action:str):
self.actions.append(action)
return self
@property
def schedule(self):
return "\n".join(self.actions)
saitama = Person()
# 원하는 만큼 다양한 traning을 추가할 수 있다.
# 또한 체이닝만 구현한다면 다른 객체의 메서드 체인으로 넘어갈 수도 있다.
saitama\
.traning("푸쉬업 100회")\
.traning("윗몸일으키기 100회")\
.traning("스쿼드 100회")\
.traning("그리고 달리기 10km!")\
print("난 3년 만에 이렇게 강해졌다.")
print(saitama.schedule)
print("그리고 그걸 매일 한다!")
- Django ORM
# 모델 Entry의 objects는 Manager 인스턴스이다.
# objects의 메소드 all은 QeurySet 인스턴스를 반환한다.
query_set = Entry.objects.all()\
# queryset은 query 조건을 부여하는 여러 메소드들을 지니며 self를 반환한다.
.filter(headline__startswith='What')\
.exclude(pub_date__gte=datetime.date.today())\
.filter(pub_date__gte=datetime.date(2005, 1, 30))
여담
- 파이썬처럼 인자 기본값과 언패킹 문법이 없는 Java는 생성자에 전달해야 할 인자가 너무 많을 경우 가독성을 위해 객체 생성을 체이닝 메소드 패턴(자바 빈 패턴)으로 구현하기도 한다.
'Design Pattern > Behavioral' 카테고리의 다른 글
[Python] Template Method Pattern (템플릿 메소드) (0) | 2020.10.18 |
---|---|
[Python] State Pattern (상태 패턴) (1) | 2020.10.16 |
[Python] Registry Pattern (레지스트리 패턴) (0) | 2020.10.15 |
[Python] Observer Pattern (옵저버 패턴) (0) | 2020.10.10 |
Comments