채니의 개발일기

파이썬 모델 - compostion이란? 본문

프로그래밍언어/파이썬

파이썬 모델 - compostion이란?

윤채니챈 2023. 10. 13. 23:06
728x90
반응형

데이터 모델(Data model)

 

- 파이썬의 데이터 모델은 객체의 특별한 동작을 정의하기 위한 프레임워크를 제공한다.

- 이는 특별메서드(또는 매직메서드 또는 던더 메서드) 를 통해 구현된다 

- 예를들어, '__getitme__', '__setitem__','__len__'등이 있다.

 

 

Composition(구성)

 

- 객체 지향 프로그래밍에서, compostion은 한 객체가 다른 객체를 포함하거나 참조하는 디자인패턴을 의미한다.

- 이는 클래스 간의 관계를 구성하는 방법 중 하나이다.

 

  •  특징

1. 강한 연관성: Compostion은 일반적으로 강한 연관성을 가진 객체 간의 관계를 나탄다. 예를, 'Car' 클래스가 'Engine'클래스의 객체를 포함하는 경우, 'Car'는 'Engine'없이 존재 할 수 없다.

 

2.  재사용성: Composition을 사용하면 기존의 클래스나 객체의 기능을 재사용 할 수 있다. 이를 통해 중복코드를 줄이고 모듈화를 향상 시킬 수 있다.

 

3. 유연성: Compostion을 통해 독립적인 클래스들을 조합하여 복잡한 기능을 구현 할 수 있다. 필요에 따라 다른 객체를 포함하거나 참조하는 방식으로 기능을 확장하거 변경 할 수 잇다.

 

4. Compositon은 'has-a' 관계를 가지며, 한클래스가 다른 클래스의 객체를 포함하거나 참조하는 방식이다. 예를 들어 "Car"는 "Engine"을 가지고 있다는 관계이다.

 

class Engine:
    def start(self):
        print('Engine started')

class Car: 
    def __init__(self):
        self.engine = Engine() #Engine클래스의 인스턴스를 포함하게된다.
    
    def start(self):
        self.engine.start()
        print("car started")

my_car = Car() #출력: Engine Started
my_car.start() #출력: car started

 

* 코드설명 

1. Engine 클래스: 

- Engine 클래스는 'strat' 메서드를 가지고있다.

- 'start' 메서드는 "Engine started"를 출력한다.

 

2. Car 클래스: 

- 'Car'클래스의 생성자('__init__')에서는 'Engine'클래스의 인스턴스를 생성하여 'self.engine'에 할당한다. 이렇게 하면 'Car'객체는 내부적으로 'Engine'객체를 포함하게된다.

- 'start' 메서드는 먼저 'self.engine.start()'를 호출하여 엔진을 시작한 후, 'car started'메세지를 출력한다

 

3. my_car 객체:

- 'Car'클래스의 인스턴스인 'my_car'객체를 생성한다. 

-'my_car.start()'를 호출하면, 'Car'클래스의 'start'메서드가 실행되며, 이 메서드 내에서 'Engine'의 'start' 메서드를 호출한다.

 

 

728x90
반응형