본문 바로가기

프로그래머/C#

Interface, Abstract, Virtual

namespace treach.tistory.com
{
    // 인터페이스 : interface
    interface A
    {
        void AA(); //추상매소드만 선언 가능.

    }                 //(abstract 예약어는 사용하지 않으며, 자식 클래스에서 매소드 구현 필요.
    interface B
    {
        void BB();
    }
    class _interface : A, B //다중 상속 가능.
    {
        public void AA() //상속 받은 클래스에서 매소드를 강제로 정의를 요함.
        {
            Console.Write("AA 매소드 구현\n");
        }
        public void BB()
        {
            Console.Write("BB 매소드 구현\n");
        }
    }

    //추상화 : abstract, override
    abstract class Animal
    {
        public void Sex() //일반 매소드를 포함할 수 있음.
        {
            Console.Write("Animal의 Sex 매소드\n");
        }
        public abstract void Eat(); //자식 클래스에서 강제로 정의를 요함.
    }
    class Dog : Animal
    {
        public override void Eat() //override 예약어로 선언된 매소드 재정의함.
        {
            Console.Write("Dog의 Eat 매소드 구현\n");
        }
    }

    //가상화 : virtual, override
    class Car
    {
        public void Name() //일반 매소드 정의 가능.
        {
            Console.Write("Car의 Name 매소드\n");
        }
        public virtual void Color() 자식 클래스에서 필요에 따라 재정의 가능하도록 virtual 선언.

        {
            Console.Write("Car의 Color 매소드\n");
        }
    }
    class Bus : Car
    {
        //public override void Color() 필요시 자식 클래스에서 재정의 가능함.
        //{
            //Console.Write("Bus의 Color 매소드 정의 가능\n");
            //base.Color(); 부모의 Color 매소드를 그대로 사용
        //}
    }

    class MAIN
    {
        static void Main(string[] args)
        {
            _interface interface_Program = new _interface();
            interface_Program.AA();
            interface_Program.BB();

            Dog _abstract = new Dog();
            _abstract.Sex();
            _abstract.Eat();

            Bus _virtual = new Bus();
            _virtual.Name();
            _virtual.Color();
        }
    }
}

 

 

간략하게 Interface, Abstract, virtual를 구분하여 사용하였으며, 주석으로 용도를 기록함.

Interface : 다중 상속 가능, 매소드 선언만 가능, 자식 클래스에서 매소드 구현 필요, 생산성 및 가독성 증가.

Abstract : 다중 상속 안되며, 일반 매소드를 포함할 수 있고, 자식클래스에서 매소드 구현 필요.

virtual : 일반 클래스의 매소드를 필요에 따라 자식 클래스에서 재구현 가능하도록 편의를 제공.

'프로그래머 > C#' 카테고리의 다른 글

코딩 테스트.  (0) 2013.01.25
디아블로3 경매장 프로그램(스톱워치)  (1) 2012.08.05
C#에서 Oracle TO_DATA 문제  (0) 2012.04.05
Label 동적 생성  (0) 2012.03.16
Delegate 이해 및 예제  (0) 2011.11.24