클래스 다이어그램은 객체 지향 프로그래밍에서 클래스 간의 관계를 시각적으로 표현한 도구입니다. 이러한 관계는 상속, 연관, 의존, 집합 등 다양한 형태로 나타낼 수 있습니다. 이번 블로그 포스트에서는 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에서 클래스 다이어그램의 관계를 표현하는 방법을 알아보았습니다. 이러한 관계를 통해 클래스 간의 상속, 연관, 의존, 집합 등의 관계를 명확하게 이해할 수 있습니다. 프로젝트를 설계하거나 코드를 분석할 때 클래스 다이어그램을 사용하여 구조를 시각화해보세요.