2009. 3. 5. 15:40

[C#] 추상클래스, 추상메서드 예제

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

// 구현 코드를 가지지 않는 메서드가 있는데 이런 메서드를 추상 메서드라고 한다.
// 추상메서드는 abstract 지정자를 붙이는데 인수 목록과 리턴 타입은 가지지만
// 본체는 가지지 않으며 세미콜론 하나로 끝난다.
//
// 다음이 그 예이다.
// public abstract int MoMo(int a, double b);
//
// 추상 메서드는 너무 일반적이기 때문에 코드를 정의할 수 없으며
// 파생 클래스에서 재정의해야만 호출 가능한 메서드가 된다.
// 파생 클래스에서 반드시 재정의해야 하므로 virtual을 붙이지 않아도 자동으로 가상이다.
//
// 추상 클래스는 너무 일반적이어서 인스턴스를 생성할 수 없는 클래스이다.
// 클래스 선언문에 abstract 지정자를 붙이면 이 클래스는 추상 클래스가 된다.
//
// 추상 메서드가 하나라도 선언되어 있는 클래스는 역시 추상이어야 한다.


namespace Abstract
{
    abstract class Animal   // 동물들은 울수 있지만 동물 그 자체는 우는 방식을 결정할 수 없는 것이다.
    {
        public abstract void Sound();   // 그래서 Animal의 Sound 메서는 본체를 가지지 않는 추상 메서드로 정의
    }                                   // 동물은 분명히 울기는 우는데 어떻게 우는지는 Animal 단계에서 결정할 수
                                        // 없고 Dog, Cow로 내려가 봐야 아는 것이다.

    class Dog : Animal
    {
        public override void Sound()
        {
            Console.WriteLine("멍멍");
        }
    }

 

    class Cow : Animal
    {
        public override void Sound()
        {
            Console.WriteLine("음메");
        }
    }

 

    class Cat : Animal
    {
        public override void Sound()
        {
            Console.WriteLine("야옹");
        }
    }

 

    class Program
    {
        static void Main(string[] args)
        {
            Animal A;
            A = new Dog(); A.Sound();
            A = new Cow(); A.Sound();
            A = new Cat(); A.Sound();
        }
    }
}

출처: 가메출판사, 닷넷 프로그래밍 정복, 김상형 저