Inferface

C#에서 인터페이스 개념과 활용에 대해서 알아보자.

인터페이스를 사용함으로서 한 클래스에서 여러 소스의 동작을 포함할 수 있다. C# 언어는 클래스에 대한 다중 상속을 지원하지 않지만 인터페이스로 다중상속 기능을 이용할수 있다.

특징:
  • 선언(Declaration)은 있고, 정의(Definition)는 없다. (Abstract class도 마찮가지)
  • 클래스와 구조체는 인터페이스를 다중상속 가능하다.
  • 클래스는 인터페이스의 메소드를 구현해야 한다.
  • 인터페이스는 인터페이스를 다중상속 가능하다.
  • 인터페이스는 인터페이스를 상속받는다.
  • 인터페이스 접근 권한은 무조건 public이다. (public을 붙일 필요 없음)
  • 묵시적으로 가상 메소드이다.
인터페이스를 이용하는 클래스의 주의점은 다음과 같다.
  • 동일한 접근 권한자이여야 한다.(public을 명시)
  • 동일한 반환값을 가져야 한다.
  • 동일한 메소드명이여야 한다.
  • 동일한 인자리스트여야 한다.

Interface(인터페이스)의 속성(Property)을 클래스에서 상속하여 사용하는 예이다.

using System;

namespace testCSharp
{
    public interface IName
    {
        string FirstName { get; set; }
        string LastName { get; set; }
    }

    public class User : IName
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        string IName.FirstName
        {
            get { return this.FirstName; }
            set { this.FirstName = value; }
        }

        string IName.LastName
        {
            get { return this.LastName; }
            set { this.LastName = value; }
        }
    }

    class Program
    {
        static void Log(IName iname)
        {
            if (iname == null)
                return;
            Console.WriteLine(iname.FirstName + "   " + iname.LastName);
        }

        static void Main(string[] args)
        {
            User user = new User();
            user.FirstName = "길동";
            user.LastName = "홍";
            Log(user as IName);
            Console.ReadKey();
        }
    }
}

참조)
( Effective C# ) item 19, 상속보다는 interface를 정의하고 구현하는 것이 좋다.
http://ikpil.com/1192

Interface(인터페이스)의 속성(Property)을 클래스에서 다중 상속하여 사용하기
http://aspdotnet.tistory.com/75

https://msdn.microsoft.com/ko-kr/library/ms173156.aspx
http://egloos.zum.com/debop/v/2298224
http://aesya.tistory.com/75
http://truepia.tistory.com/177