언어 자료구조 알고리즘/프로그래밍 실습

[C# 소스] 클래스 간의 관계 - 5. 의존(Dependency) 관계

언제나휴일 2017. 9. 14. 11:37
반응형

[C# 소스] 클래스 간의 관계 - 5. 의존(Dependency) 관계


 

의존(Dependency) 관계

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

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

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

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

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

using System;

 

namespace 의존관계

{

    class Product

    {

        public string FName

        {

            get;

            private set;

        }

        readonly int pnum;

        public int PNum

        {

            get

            {

                return pnum;

            }

        }

        public string Name

        {

            get;

            private set;

        }

        public Product(string name,string fname,int pnum)

        {

            Name = name;

            this.pnum = pnum;

            FName = fname;

        }

    }

    class Factory

    {

        public string Name

        {

            get;

            private set;

        }

        public int Serial

        {

            get;

            private set;

        }

        public Factory(string name)

        {

            Name = name;

        }

        public Product MakeOrderBy(string name)

        {

            Serial++;

            return new Product(name,this.Name, Serial);

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Factory factory = new Factory("언휴");

            Product p = factory.MakeOrderBy("연필");

            Console.WriteLine("{0},{1},{2}", p.FName, p.PNum, p.Name);

        }

    }

}

 

 

반응형