클래스의 분리와 단일 책임 원칙(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를 지키는 객체지향 코드를 작성하여 소프트웨어 개발의 효율성을 높여봅시다!