[실습으로 다지는 C#] 일반화 관계(Generalization) 실습 – 포유류, 호랑이, 사자

 

 이번 강의에서는 일반화 관계(Generalization)를 코드로 표현하는 실습입니다.

 일반화 관계는 “A는 B이다.”로 표현할 수 있는 형식 사이의 관계라고 했어요. 이번 실습에서는 “호랑이는 포유류이다.”, “사자는 포유류이다.”를 표현할 거예요. 

 포유류는 공통적으로 새끼에게 젖을 물리는 행위를 합니다. 그리고 울기도 합니다. 물론, 호랑이와 사자는 울음 소리가 다르죠. 

 이러한 내용을 실습해 볼 거예요.

 

 먼저 클래스 다이어그램을 작성하면 다음처럼 작성할 수 있어요.

일반화 관계 클래스 다이어그램

여러분께서 실습할 내용과 클래스 다이어그램을 토대로 구현을 해 보세요. 그리고 비교해 보시기 바랍니다.

기반 형식 포유류(Mammal)에는 울다(Cry) 메서드를 약속합니다. 기능을 구현하지 않고 약속만 할 때 abstract 키워드를 명시하여 추상 메서드로 만듭니다. 또한 추상 멤버가 하나라도 있다면 해당 형식은 반드시 추상 클래스로 정의하여야 합니다.

using System;

namespace 일반화_관계_실습
{
    abstract class Mammal
    {
        public abstract void Cry();
        public void Nurse()
        {
            Console.WriteLine("새끼에게 젖을 물리다.");
        }
    }
}

호랑이와 사자는 포유류를 기반으로 파생 형식으로 정의합니다. 그리고 기반 형식에 추상 메서드로 정의한 Cry를 반드시 재정의해 주어야 합니다.

using System;

namespace 일반화_관계_실습
{
    class Tiger:Mammal
    {
        public override void Cry()
        {
            Console.WriteLine("어흥~ 난 호랑이야.");
        }
    }
}
using System;

namespace 일반화_관계_실습
{
    class Lion:Mammal
    {
        public override void Cry()
        {
            Console.WriteLine("어흥~ 난 사자야.");
        }
    }
}

마지막으로 테스트하는 코드에서는 호랑이와 사자 개체를 생성하여 Cry와 Nurse 메서드를 호출해 보기로 합시다.

일반화 관계에서는 기반 형식에 정의한 멤버를 파생 형식에서 상속받는 특징이 있기 때문에 Nurse 메서드를 호출할 수 있어요.

//https://ehpub.co.kr
//실습으로 다지는 C#
//일반화 관계 실습 - 포유류, 호랑이, 사자

namespace 일반화_관계_실습
{
    class Program
    {
        static void Main(string[] args)
        {
            Mammal[] mammals = new Mammal[2];
            mammals[0] = new Tiger();
            mammals[1] = new Lion();

            foreach(Mammal mammal in mammals)
            {
                mammal.Cry();
                mammal.Nurse();
            }
        }
    }
}

실행 결과는 다음과 같습니다.

어흥~ 난 호랑이야.
새끼에게 젖을 물리다.
어흥~ 난 사자야.
새끼에게 젖을 물리다.