카테고리 없음
[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 클래스에 의존하고 있다고 볼 수 있다.
의존관계를 설정하고 유지함으로써, 모듈의 독립성과 재사용성을 높일 수 있고, 코드의 유지보수성과 확장성을 높일 수 있다.
따라서, 코드 설계 시에 의존관계를 고려하여 설계하는 것이 중요하다고 볼 수 있다.