[디딤돌 C++] 66. 의존(DEPENDENCY) 관계

의존 관계는 다른 개체의 변화가 발생했을 때 자신에 영향을 받는 개체 사이의 관계입니다. 그리고 특정 개체의 생성을 담당할 때도 의존 관계로 표현합니다.

GUI(Graphic User Interface) 프로그램에서 특정 데이터의 정보를 화면에 표시하는 컨트롤과 데이터 사이에는 의존 관계로 표현할 수 있습니다. UI 컨트롤을 통해 사용자가 개체의 속성을 입력하면 의존 관계에 있는 개체의 속성을 변경해야겠죠. 혹은 개체의 속성이 변하면 UI 컨트롤을 통해 변경한 정보를 사용자에 알려주어야 할 것입니다. 이 책에서는 GUI를 다루고 있지 않아 이와 같은 의존 관계는 표현하지 않을 거예요.

소프트웨어 설계에 관한 많은 레퍼런스에서는 UI 컨트롤과 개체 사이의 의존 관계보다 다른 개체의 생성을 담당할 때의 의존 관계를 자주 볼 수 있습니다. 특히 설계 패턴을 다루는 레퍼런스에서 이와 같은 관계를 쉽게 볼 수 있습니다.

예를 들어 공장 클래스에서 제품을 생성하는 책임을 부여할 때 공장과 제품은 의존 관계입니다. 이처럼 의존 관계를 표현하면 여러 곳에서 제품 개체를 사용할 때 공장 클래스에게만 생성과 소멸의 책임을 부여하여 신뢰성 높은 코드를 만들 수 있습니다.

다음은 의존 관계에 있는 공장과 제품을 표현한 예제 코드입니다.

//Product.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Product
{
    string name;
    int price;
    const int pnum;
public:
    Product(string name,int price,int pnum);
    void View()const;
};
//Product.cpp
#include "Product.h"

Product::Product(string name,int price,int pnum):pnum(pnum)
{
    this->name = name;
    this->price = price;
}
void Product::View()const
{
    cout<<"일련번호:"<<pnum<<" 제품명:"<<name<<" 가격:"<<price<<endl;
}
//Factory.h
#pragma once
#include "Product.h"
#define MAX_PRODUCTS	10
class Factory
{
    Product *products[MAX_PRODUCTS];
    int sellcnt;
public:
    Factory(void);
    ~Factory(void);
    Product *Order(string name,int price);
};
//Factory.cpp
#include "Factory.h"

Factory::Factory(void)
{    
    sellcnt = 0;
}

Factory::~Factory(void)
{ 
    for(int i = 0; i < sellcnt ; i++)
    {
        delete products[i];
    }
}
Product *Factory::Order(string name,int price)
{
    Product *product  = new Product(name,price,sellcnt+1);
    products[sellcnt] = product;
    sellcnt++;
    return product;
}
//Program.cpp
#include "Factory.h"

int main()
{
    Factory *factory = new Factory();
    Product *product = factory->Order("디딤돌C언어",5000);
    product->View();
    Product *product2 = factory->Order("디딤돌CPP",5000);
    product2->View();
    
    delete factory;
    return 0;
}

▷ 실행 결과

일련번호:1 제품명:디딤돌C언어 가격:5000
일련번호:2 제품명:디딤돌CPP 가격:5000