[실습으로 다지는 C#] 연관 관계(Association) 실습 – 의사, 약사

 이번 강의는 연관 관계(Association) 실습입니다.

 연관 관계는 두 형식 개체가 협업하는 관계입니다. 현실 세계에서는 수평적인 관계가 이상적이라 생각할 수 있어요. 하지만 프로그램 세계는 명확한 목적을 수행하는 목적 집단입니다. 목적 집단에서는 명확한 수직 관계로 조직화합니다. 

 프로그램에 연관 관계가 있을 때 협업하는 메서드를 수행할 때 매우 위험할 수 있어요. 서로 상대의 협업 메서드를 호출하면 실제 메서드는 끝나지 않고 스택 메모리 Overflow가 발생할 수 있는 것입니다.

 이번 실습에서는 이러한 위험성을 확인해 보기로 해요.

 실습할 소재는 의사와 약사 사이의 협업입니다.

 의사는 “약사와 함께 일하다.”, “치료하다.” 기능을 제공합시다.

 약사는 “의사와 함께 일하다.”, “조재하다.” 기능을 제공합시다.

 이를 클래스 다이어그램으로 표시하면 두 형식 사이에 실선으로 연관 관계를 표시합니다.

연관 관계 클래스 다이어그램
using System;

namespace 연관_관계_실습
{
    class Druggist
    {
        public void WorkWith(Doctor doctor)
        {
            Console.WriteLine("약사 - WorkWith");
            doctor.WorkWith(this);
            Hasty();
        }
        public void Hasty()
        {
            Console.WriteLine("조재하다.");
        }
    }
}

using System;

namespace 연관_관계_실습
{
    class Doctor
    {
        public void WorkWith(Druggist druggist)
        {
            Console.WriteLine("의사 - WorkWith");
            druggist.WorkWith(this);
            Treatment();
        }
        public void Treatment()
        {
            Console.WriteLine("치료하다.");
        }
    }
}
//https://ehpub.co.kr
//실습으로 다지는 C#
//연관(Association) 관계 실습 - 의사, 약사

using System;

namespace 연관_관계_실습
{
    class Program
    {
        static void Main(string[] args)
        {
            Doctor doctor = new Doctor();
            Druggist druggist = new Druggist();
            Console.ReadKey();
            doctor.WorkWith(druggist);
        }
    }
}