카테고리 없음

[Cpp] 클래스 관계 - 의존(dependency)

Bangii 2023. 3. 9. 10:28

의존관계는 상속관계보다 약한 관계이다.
의존성은 일반적으로 사용관계(use-a)로 표현된다. 클래스 A가 내부적으로 클래스 B를 사용하고 있다면 이는 클래스 A가 클래스 B를 의존하고 있다고 볼 수 있다.
정리하면 아래의 경우로 나타낼 수 있다.

  • 클래스 A의 멤버 함수에서 매개변수로 클래스 B 자료형을 사용하는 경우
  • 클래스 A의 멤버 함수에서 리턴 값으로 클래스 B 자료형을 사용하는 경우
  • 클래스 A의 멤버 함수에서 지역 변수로 클래스 B 자료형을 사용하는 경우

의존 관계는 클래스 다이어그램과 시퀀스 다이어그램을 사용하여 표현된다.
예를들어, 운전자가 차를 빌려 운전한다고 생각해보자. 운전자는 차를 소유하고 있지 않지만 운전을 하기 위해서는 차가 필요하다. 따라서 운전하는 함수에는 차 클래스가 필요하다고 할 수 있다. 즉 운전자클래스와 차 클래스로 구분했을 때 운전자 클래스는 차 클래스에 의존하고 있다고 설명할 수 있다.
아래는 예시를 클래스 다이어그램으로 표현한 것이다.
의존관계는 점선으로 표현한다.

다음은 위 관계를 코드로 나타낸 것이다.

#include <iostream>
#include <string>

class Car {
public:
    void startEngine() {
        std::cout << "Engine started." << std::endl;
    }
};

class Driver {
public:
    void startCar(Car& car) {
        std::cout << "Driver starts the car." << std::endl;
        car.startEngine();
    }
};

int main() {
    Car car;
    Driver driver;

    driver.startCar(car);

    return 0;
}

Driver 클래스는 Car 클래스에 의존한다.
Driver 클래스의 startCar 함수에서는 Car 객체를 매개변수로 받아 Car 클래스의 startEngine 함수를 호출한다.
따라서 Driver 클래스는 Car 클래스에 의존하고 있다고 볼 수 있다.

의존관계를 설정하고 유지함으로써, 모듈의 독립성과 재사용성을 높일 수 있고, 코드의 유지보수성과 확장성을 높일 수 있다.
따라서, 코드 설계 시에 의존관계를 고려하여 설계하는 것이 중요하다고 볼 수 있다.