[실습으로 다지는 C#] 실현 관계(Realization) 실습

 이번 강의는 실현(Realization) 관계 실습입니다.

 실현 관계는 기능을 약속한 형식과 이를 구체적으로 구현한 형식 사이의 관계입니다. 결국 인터페이스와 인터페이스에 약속한 기능을 구현한 형식 사이의 관계입니다.

기능을 약속한 형식과 약속한 기능을 구체적으로 구현한 형식 사이의 관계

 이러한 실현 관계로 표현하였을 때 가장 큰 장점은 같은 방법으로 사용할 수 있다는 것입니다.

 다음은 이번 실습에서 표현할 클래스 다이어그램입니다.

실현 관계 클래스 다이어그램
실현 관계 클래스 다이어그램

 

 클래스 다이어그램에서 IStudy 인터페이스와 Student는 실현 관계입니다.

 클래스 다이어그램에서 IStudy 인터페이스와 Gorillar도 실현 관계입니다.

 클래스 다이어그램을 보면서 코드로 표현해 보세요. 특별한 알고리즘은 없어서 설명은 생략할게요. 주의할 점은 Student는 Man에서 파생하고 IStudy에 약속한 기능을 구현하고 있다는 것이죠. 둘 다 파생 문법으로 표현하지만 기반 형식인 Man을 먼저 표시해야 합니다.

class Student:Man, IStudy

namespace 실현_관계
{
    interface IStudy
    {
        void Study();
    }
}

namespace 실현_관계
{
    class Man
    {
        string name;
        public Man(string name)
        {
            this.name = name;
        }
        public override string ToString()
        {
            return name;
        }        
    }
}

using System;

namespace 실현_관계
{
    class Student : Man, IStudy
    {
        readonly int sn;
        public Student(string name,int sn):base(name)
        {
            this.sn = sn;
        }
        public void Study()
        {
            Console.WriteLine("{0} 공부합니다.",this);
        }
        public override string ToString()
        {
            return string.Format("{0}번 이름:{1}", sn, base.ToString());
        }
    }
}

using System;

namespace 실현_관계
{
    class Gorilla : IStudy
    {
        public void Study()
        {
            Console.WriteLine("나도 공부한다. 쿵쾅 쿵쾅");
        }
    }
}
//https://ehpub.co.kr
//실습으로 다지는 C#
//실현 관계(Realization)

using System;

namespace 실현_관계
{
    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student("홍길동",1);
            Gorilla gorilla = new Gorilla();
            Console.WriteLine("생성한 학생:{0}", student);

            Test(student);
            Test(gorilla);
        }
        static void Test(IStudy istudy)
        {
            istudy.Study();
        }
    }
}