[파이썬] 구조 패턴과 객체 구조 조정

구조 패턴은 소프트웨어의 구조와 관련된 문제를 해결하기 위한 디자인 패턴입니다. 이러한 패턴들은 소프트웨어의 유지보수성, 확장성, 재사용성을 향상시키는 도구로 사용됩니다. 클래스와 객체의 구조를 조정하는 것은 구조 패턴의 핵심적인 목표입니다. Python은 이러한 구조 패턴을 구현하는 데 매우 유용한 기능들을 제공합니다.

패턴 예시: MVVM (Model-View-ViewModel)

MVVM은 GUI 애플리케이션을 개발할 때 많이 사용되는 구조 패턴입니다. 이 패턴은 소프트웨어의 로직 부분과 뷰 부분의 역할을 분리하여 유연하고 확장 가능한 애플리케이션을 만들 수 있도록 해줍니다.

Model (모델)

class User:
    def __init__(self, name: str, email: str):
        self.name = name
        self.email = email

Model은 애플리케이션의 데이터를 다루는 부분입니다. 위의 예시는 User라는 간단한 모델을 보여줍니다. User 클래스에는 이름과 이메일 주소를 저장하는 속성들이 있습니다.

View (뷰)

class UserView:
    def display_user_info(self, user: User):
        print(f"Name: {user.name}")
        print(f"Email: {user.email}")

View는 사용자에게 정보를 보여주는 역할을 담당합니다. 위의 예시는 display_user_info 메서드를 가진 UserView 클래스를 보여줍니다. 이 메서드는 User 객체를 인자로 받아 사용자의 이름과 이메일 주소를 출력합니다.

ViewModel (뷰 모델)

class UserViewModel:
    def __init__(self, user: User, view: UserView):
        self.user = user
        self.view = view

    def display_user_info(self):
        self.view.display_user_info(self.user)

ViewModel은 Model과 View를 연결하고 조정하는 역할을 합니다. 위의 예시는 User 객체와 UserView 객체를 인자로 받는 UserViewModel 클래스를 보여줍니다. display_user_info 메서드는 ViewModel 내에서 View를 호출하여 사용자 정보를 출력합니다.

객체 구조 조정 예시: Composite 패턴

Composite 패턴은 객체들을 트리 구조로 구성하여 부분-전체 계층 구조를 표현하는 패턴입니다. 이 패턴은 객체들 간에 동일한 인터페이스를 사용하여 작업할 수 있도록 해줍니다.

from abc import ABC, abstractmethod

class Graphic(ABC):
    @abstractmethod
    def draw(self):
        pass

class Circle(Graphic):
    def draw(self):
        print("Drawing a circle")

class Square(Graphic):
    def draw(self):
        print("Drawing a square")

class CompositeGraphic(Graphic):
    def __init__(self):
        self.graphics = []

    def add(self, graphic: Graphic):
        self.graphics.append(graphic)

    def remove(self, graphic: Graphic):
        self.graphics.remove(graphic)

    def draw(self):
        for graphic in self.graphics:
            graphic.draw()

위의 예시는 Composite 패턴을 사용하여 그래픽 요소들을 구조화하는 코드입니다. Graphic 클래스는 그래픽 요소들의 공통 인터페이스를 정의하고, Circle과 Square은 이를 구현합니다. CompositeGraphic 클래스는 Graphic을 상속받아 여러 그래픽 요소들을 관리하고 전체를 그리는 역할을 합니다.

결론

Python은 구조 패턴과 객체 구조 조정을 위한 많은 기능들을 제공합니다. MVVM과 Composite 패턴은 이러한 기능들을 활용하여 소프트웨어의 확장성과 재사용성을 향상시킬 수 있는 좋은 예시입니다. 따라서, 개발자들은 Python의 강력한 기능들을 활용하여 구조 패턴을 적극적으로 활용하고 객체 구조를 조정할 수 있습니다.