이번 강의에서는 일반화 관계(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(); } } } }
실행 결과는 다음과 같습니다.
어흥~ 난 호랑이야. 새끼에게 젖을 물리다. 어흥~ 난 사자야. 새끼에게 젖을 물리다.