[파이썬] 클래스의 분리와 단일 책임 원칙

클래스의 분리와 단일 책임 원칙(Single Responsibility Principle, SRP)은 객체지향 프로그래밍에서 중요한 개념입니다. 이 원칙은 각 클래스는 한 가지 주요한 책임을 가지고 있어야 한다는 의미를 가지고 있습니다. 클래스가 여러 가지 역할을 동시에 수행하면 유지 보수가 어려워지고, 코드의 가독성과 재사용성이 저하될 수 있습니다.

SRP의 개념

SRP는 소프트웨어 디자인 원칙 중에서 SOLID 원칙 중 하나입니다. SRP는 클래스를 단일 책임을 가지는 작은 단위로 분리하여 코드의 독립성과 유연성을 높이는데 목적을 가지고 있습니다. 각 클래스는 한 가지 주요한 책임만을 지니고 있어야 하며, 다른 클래스와의 의존성을 최소화해야 합니다.

SRP를 따르는 예제

이제 파이썬으로 SRP를 따르는 예제를 살펴보겠습니다. 예를 들어, 주문 시스템을 구현해보기로 합시다. 주문 시스템은 주문을 처리하고, 결제를 관리하며, 이메일로 주문 확인을 보내는 기능을 가지고 있다고 가정해보겠습니다.

class Order:
    def __init__(self, customer, items):
        self.customer = customer
        self.items = items

    def process_order(self):
        self.calculate_total()
        self.decrease_stock()
        self.process_payment()
        self.send_confirmation_email()

    def calculate_total(self):
        # calculate total price of items
        pass

    def decrease_stock(self):
        # decrease stock quantity of items
        pass

    def process_payment(self):
        # process payment
        pass

    def send_confirmation_email(self):
        # send confirmation email to customer
        pass

위의 예제 코드는 주문 클래스가 주문 처리, 결제 관리, 이메일 발송과 같은 여러 가지 책임을 갖고 있습니다. 이는 SRP에 위배되는 구현입니다.

SRP를 따르는 예제 개선

이제 SRP를 따르는 구현으로 수정해보겠습니다.

class Order:
    def __init__(self, customer, items):
        self.customer = customer
        self.items = items

    def process_order(self):
        self.calculate_total()
        self.decrease_stock()
    
class Payment:
    def process_payment(self):
        # process payment
        pass

class Email:
    def send_confirmation_email(self):
        # send confirmation email to customer
        pass

개선된 예제 코드에서는 Order 클래스는 주문 처리와 관련된 책임만을 가지고 있습니다. 결제 처리와 이메일 발송 기능은 각각 Payment 클래스와 Email 클래스로 분리되었습니다.

SRP의 장점

마무리

클래스의 분리와 단일 책임 원칙은 소프트웨어의 유지 보수성과 가독성을 향상시키기 위한 중요한 원칙입니다. 적절한 클래스 분리를 통해 코드의 독립성과 재사용성을 높이고, 가독성을 향상시킬 수 있습니다. SRP를 지키는 객체지향 코드를 작성하여 소프트웨어 개발의 효율성을 높여봅시다!