기초 메모지

C# - 인터페이스(Interface) 본문

Languages/C#

C# - 인터페이스(Interface)

라큐브 2022. 7. 5. 16:25

인터페이스?

- 객체지향에서 하위 타입(클래스)은 상위 타입(클래스)으로 형변환이 가능하다는 원리를 이용합니다.

- 추상적인 메서드 구현(재정의)을 강제하여 상속받는 클래스에서 구체화를 유도합니다.

- 느슨한 결합(특정 타입에 종속되지 않는 코드)을 유도하여 코드의 유연성을 높입니다.

추상적인 것을 구체적으로

인터페이스에서 추상(범주)화한 메서드를 상속한 클래스에 맞게 구체화합니다.

interface ITransportation
{
        // 각 클래스의 공통된 행위(메서드), 특성을 정의하고 구현할 것을 강제.
        // 반환 형식, 메서드명, 시그니처만 선언.
        // 인터페이스는 내용이 아닌 외형.
        // 구체적인 기능 구현은 인터페이스를 상속받는 클래스에서 작성. 
        
        // 이동수단의 특성인 움직인다는 것을 Move 메서드로 추상화.
        void Move();
        // 이동수단의 특성인 짐을 싣는다는 것을 Load 메서드로 추상화.
        void Load();
}

class Car : ITransportation
{
    // 추상적이었던 메서드를 각 클래스에 맞게 구체화
    public void Load()
    {
        Console.WriteLine("차에 짐을 싣고 갑니다.");
    }

    public void Move()
    {
        Console.WriteLine("차로 집에 갑니다.");
    }
}

강한 결합을 약한 결합으로

매계변수 타입을 특정 클래스 타입이 아닌 인터페이스 타입으로 받아 상속한 클래스에서 구현(재정의)한 메서드를 실행 합니다. 

interface IPower
{
    void TurnOn();
    void TurnOff();
}

// 각 클래스 별로 추상적인 메서드를 구체화합니다.
class Monitor : IPower
{
    public void TurnOn()
    {
        Console.WriteLine("Monitor : On");
    }

    public void TurnOff()
    {
        Console.WriteLine("Monitor : Off");
    }
}

class Computer : IPower
{
    public void TurnOn()
    {
        Console.WriteLine("Computer : On");
    }

    public void TurnOff()
    {
        Console.WriteLine("Computer : Off");
	}
}

class Switch
{
    // Switch - 인터페이스 사용
    // 상위 클래스(인터페이스)를 상속한 하위 클래스는 상위 클래스(인터페이스) 타입(Type)으로 변환이 가능하다.
    /// <summary>
    /// /// IPower의 PowerOn를 구현(재정의)한 메소드를 출력  
    /// </summary>
    /// <param name="Device"></param>
    public void PowerOn(IPower Device)
    {
        // IPower 타입의 TurnOn 메서드를 실행한다.
        // IPower의 타입을 가져야 하므로 IPower를 상속한 클래스여야한다.
        Device.TurnOn();
    }

    /// <summary>
    /// IPower의 PowerOff를 구현(재정의)한 메소드를 출력  
    /// </summary>
    /// <param name="Device">IPower를 상속한 클래스의 인스턴스(Instance)</param>
    public void PowerOff(IPower Device)
    {
        // IPower 타입의 TurnOff 메서드를 실행한다.
        // IPower의 타입을 가져야 하므로 IPower를 상속한 클래스여야한다.
        Device.TurnOff();
    }

    // Switch - 클래스 사용
    // 타입 별로 PowerOn, PowerOff 메소드가 있어야 한다.
    public void PowerOn(Computer Device)
    {
        // 무조건 Computer 타입(Type)만 매계변수로 받을 수 있다
        Device.TurnOn();
    }

    public void PowerOff(Computer Device)
    {
        // 무조건 Computer 타입(Type)만 매계변수로 받을 수 있다
        Device.TurnOn();
    }
}

정리

인터페이스는 도형 놀이와 같습니다.

도형 틀에 모양은 다르지만 도형이라는 범주에 속한 삼각형, 사각형, 육각형 등이 포함할 수 있습니다. 
마찬가지로 '인터페이스' 라는 개념도 서로 형태가 다른 타입(클래스)들을 하나의 범주로 묶어 중복된 코드를 제거하는데 목적을 두고 있습니다.

반응형
Comments