외규장각 도서 환수 모금 캠페인

interface란?

Interesting/C# 2008. 11. 8. 13:57

인터페이스는 규약(Contract) 이라고 불립니다. 인터페이스 안에는 메소드뿐만 아니라 속성, 이벤트, 인덱서 등의 멤버를 가질 수 있지만 메소드에 대해서만 다루겠습니다.

 

C#에서는 클래스의 다중 상속을 지원하지 않습니다. 인터페이스는 각 클래스들이 구현해야 하는 일을 정의해 놓은 것이라고 보시면 좋을 거 같습니다. 하지만 클래스와는 달리, 인터페이스는 규약, 약속이기 때문에 여러 개의 인터페이스로부터 상속이 가능합니다. 클래스를 상속 받으면 인터페이스를 상속 받을 수 있기 때문에 상속에 상관없이 인터페이스를 사용할 수 있답니다.


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

namespace interface_test
{
    interface IState
    {
        void stand();
        void sleep();
    }
    interface IEat
    {
        void hamburger();
        void korean_food();
    }
    class IPresent : IState, IEat
    {
        public void stand()
        {
            Console.WriteLine("나는 서있습니다.");
        }
        public void sleep()
        {
            Console.WriteLine("나는 자고 있습니다.");
        }
        public void hamburger()
        {
            Console.WriteLine("나는 햄버거를 먹습니다.");
        }
        public void korean_food()
        {
            Console.WriteLine("나는 한식을 먹습니다..");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IPresent ip = new IPresent();
            ip.stand();
            ip.sleep();
            ip.hamburger();
            ip.korean_food();
        }
    }
}



위의 소스를 보면 interface로 각각의 메소드를 2개씩만들었습니다.
만약 interface로 하지 않고 class로 선언했다면 IPresent 클래스에서는 두개의 상속이 아닌 한개의 상속만 받을 수 있습니다. 이와 같이 여러개의 상속을 한번에 받고자 하는 경우에 사용하면 편리합니다.
추상 클래스를 사용하여 본래의 메소드와 다른 기능을 수행하게 할 수 있으나 우선은 interface가 목적이므로 추상클래스를 사용하지 않았습니다. 위의 소스만 이해 하신다면 interface는 쉽게 이해하실 수 있을 것입니다.

Posted by 닉네임영역
,


사랑합니다. 편안히 잠드소서