[파이썬] 클래스 다이어그램의 관계

클래스 다이어그램은 객체 지향 프로그래밍에서 클래스 간의 관계를 시각적으로 표현한 도구입니다. 이러한 관계는 상속, 연관, 의존, 집합 등 다양한 형태로 나타낼 수 있습니다. 이번 블로그 포스트에서는 Python에서 클래스 다이어그램의 관계를 어떻게 표현할 수 있는지 알아보겠습니다.

1. 상속 (Inheritance)

상속은 한 클래스가 다른 클래스의 속성과 메소드를 상속 받는 관계입니다. 파이썬에서는 class SubClass(BaseClass)와 같은 형태로 상속을 정의할 수 있습니다. 아래는 상속의 예시입니다.

class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        pass
        
class Dog(Animal):
    def speak(self):
        return "Woof!"

위의 예시에서 Dog 클래스가 Animal 클래스를 상속받았습니다. 이를 클래스 다이어그램으로 표현하면 다음과 같습니다.

           +--------------+
           |    Animal    |
           +--------------+
                  ^
                  |
           +--------------+
           |     Dog      |
           +--------------+

2. 연관 (Association)

연관은 두 클래스 간의 관계를 나타내는 것으로, 하나의 클래스가 다른 클래스의 인스턴스를 참조할 수 있는 관계입니다. 파이썬에서는 인스턴스 변수를 이용하여 연관 관계를 표현할 수 있습니다. 아래는 연관 관계의 예시입니다.

class Car:
    def __init__(self, manufacturer):
        self.manufacturer = manufacturer
        
class Driver:
    def __init__(self, name):
        self.name = name
        
    def drive(self, car):
        print(f"{self.name} is driving a car manufactured by {car.manufacturer}.")

위의 예시에서 Driver 클래스가 Car 클래스와 연관되어 있습니다. 이를 클래스 다이어그램으로 표현하면 다음과 같습니다.

           +--------------+
           |     Car      |
           +--------------+
                  ^
                  |
           +--------------+
           |    Driver    |
           +--------------+

3. 의존 (Dependency)

의존은 한 클래스가 다른 클래스에 의존하는 관계로, 한 클래스의 메소드에서 다른 클래스를 사용하는 경우 발생합니다. 파이썬에서 의존 관계를 표현하기 위해서는 해당 클래스를 인자로 받거나 의존하는 클래스의 인스턴스를 생성해야 합니다. 아래는 의존 관계의 예시입니다.

class Logger:
    def log(self, message):
        print(f"Logging message: {message}")
        
class UserManager:
    def __init__(self, logger):
        self.logger = logger
        
    def register(self, username, password):
        self.logger.log(f"Registered new user: {username}.")

위의 예시에서 UserManager 클래스가 Logger 클래스에 의존하고 있습니다. 이를 클래스 다이어그램으로 표현하면 다음과 같습니다.

           +--------------+
           |    Logger    |
           +--------------+
                  ^
                  |
           +--------------+
           | UserManager |
           +--------------+

4. 집합 (Composition)

집합은 한 클래스가 다른 클래스의 인스턴스를 소유하는 관계로, 생명 주기가 함께하는 경우에 발생합니다. 파이썬에서는 클래스의 인스턴스 변수로 다른 클래스의 인스턴스를 가지도록 정의하면 됩니다. 아래는 집합 관계의 예시입니다.

class Engine:
    def start(self):
        print("Engine started.")
        
    def stop(self):
        print("Engine stopped.")
        
class Car:
    def __init__(self):
        self.engine = Engine()
        
    def drive(self):
        self.engine.start()
        print("Driving the car...")
        self.engine.stop()

위의 예시에서 Car 클래스는 Engine 클래스의 인스턴스를 소유하고 있습니다. 이를 클래스 다이어그램으로 표현하면 다음과 같습니다.

           +--------------+
           |    Engine    |
           +--------------+
             /
           /
          +
          |
           +--------------+
           |     Car      |
           +--------------+

결론

이번 블로그 포스트에서는 Python에서 클래스 다이어그램의 관계를 표현하는 방법을 알아보았습니다. 이러한 관계를 통해 클래스 간의 상속, 연관, 의존, 집합 등의 관계를 명확하게 이해할 수 있습니다. 프로젝트를 설계하거나 코드를 분석할 때 클래스 다이어그램을 사용하여 구조를 시각화해보세요.