본문 바로가기

TIL

[ 24.05.01 ] 내일배움캠프 13일차 TIL - 인터페이스

[ ps ]

 

[ 백준 / C++ ] 2605 : 줄 세우기 (tistory.com)

 

[ 내일배움캠프 / Unity ]

 

C# 에서 클래스는 다중 상속을 지원하지 않는다.

 

이에는 여러 이유가 존재한다.

 

큰 이유로, 

자식 클래스가 여러 부모 클래스를 상속받게 되면, 동일한 멤버를 상속받을 경우가 존재한다.

이 때, 어떤 부모 클래스의 멤버를 사용할 것인지 혼란에 빠지게 되고, 이로 인해 코드가 꼬이게 된다.

 

반면, 인터페이스는 다중 상속을 지원한다. 

이러한 이유는 인터페이스의 특징에서 납득할 수 있다.

인터페이스는 클래스에 대한 제약 조건을 명시할 뿐이지, 클래스와는 다르게 구현해 놓지는 않기 때문이다.

 

즉, 인터페이스는 추상적인 동작만 정의하고, 구현을 갖지 않는다.

이러한 특징으로 인해 다중 상속이 가능하며, 여러 클래스가 동일한 인터페이스를 구현할 수도 있다.

 

단점으로는 인터페이스를 상속받은 모든 클래스는 구현을 강요받기 때문에 작업량이 증가할 수 있다.

 

만약 구현해야 하는 동작이 겹치면, 아래와 같이 한번만 구현하면 된다.

public class Program
{
    // 인터페이스 1
    public interface A
    {
        void Test();
    }

    // 인터페이스 2
    public interface B
    {
        void Test();
    }

    // 아이템 클래스
    public class Item : A, B
    {
        public string Name { get; set; }

        // 인터페이스 제약 조건 겹침
        // 한 번만 구현하면 됨
        public void Test()
        {
            Console.WriteLine("테스트 : {0}", Name);
        }
    }

    static void Main(string[] args)
    {
        Item item = new Item { Name = "test" };
        item.Test(); // 출력 결과 -> 테스트 : test
    }
}