Exist Technote

[Python] Chaining Method Pattern (체이닝 메소드 패턴) 본문

Design Pattern/Behavioral

[Python] Chaining Method Pattern (체이닝 메소드 패턴)

by_Exist 2020. 10. 14. 17:03

메소드가 체인처럼 연결되어 있는 패턴.

Chaining 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는 생성자에 전달해야 할 인자가 너무 많을 경우 가독성을 위해 객체 생성을 체이닝 메소드 패턴(자바 빈 패턴)으로 구현하기도 한다.
Comments