인터페이스의 기본 구현 메소드

00·2024년 12월 17일

C#

목록 보기
23/149

using System;

/*
인터페이스의 '기본 구현 메소드':
구현부를 가지는 메소드.
놓친 메소드를 인터페이스에 안전하게 추가하는 방법임 !

인터페이스에 새로운 메소드를 추가할 떄, 기본적인 구현체를 갖도록 해서
기존에 인터페이스를 구현한 클래스들이 코드를 수정하지 않아도 컴파일 오류가 발생하지 않도록 하는 기능 !
(스마트폰 운영체제 업데이트를 했을 때, 기존 앱들이 호환성 문제없이 작동하는 것과 비슷)

인터페이스 참조로 업캐스팅했을 때만 사용할 수 있음. 인터페이스를 직접 참조해야함.
-> 따라서 파생 클래스에서 인터페이스에 추가된 메소드를 잘못 호출할 가능성도 없으므로 좋음.

<-> 원래는 인터페이스가 선언하는 메소드는 파생될 클래스가 무엇을 구현해야 하는지를 정의하는 역할만 했음.
따라서 인터페이스에 선언하는 메소드에 구현부가 없는게 보통.
*/

namespace DefaultImplementation
{
interface ILogger
{
void WriteLog(string message);

    void WriteError(string error) // 새로운 메소드 추가
    {
        WriteLog($"Error: {error}"); // WriteError() 메소드는 기본 구현을 가지고 있음.
    }
}


// ConsoleLogger: ILogger 인터페이스를 구현하는 클래스
// WriteLog() 메서드만 구현했음.
class ConsoleLogger : ILogger
{
    public void WriteLog(string message)
    {
        Console.WriteLine(
            $"{DateTime.Now.ToLocalTime()}, {message}");
    }
}

class MainApp
{
    static void Main(string[] args)
    {
        ILogger logger = new ConsoleLogger(); // ILogger 타입의 변수 logger를 선언하고 ConsoleLogger 객체를 할당합니다.
        logger.WriteLog("System Up"); // WriteLog() 메서드를 호출하여 "System Up" 메시지를 출력합니다.
        logger.WriteError("System Fail"); // WriteError() 메서드를 호출하여 "System Fail" 오류 메시지를 출력합니다.
                                          // ConsoleLogger 클래스는 WriteError() 메서드를 구현하지 않았지만, 
                                          // 인터페이스의 기본 구현을 사용하기 때문에 오류 없이 실행됩니다!!


        ConsoleLogger clogger = new ConsoleLogger(); // ConsoleLogger 타입의 변수 clogger를 선언하고 ConsoleLogger 객체를 할당합니다.
        clogger.WriteLog("System Up"); //  clogger 변수를 통해 WriteLog() 메서드를 호출합니다.

        // clogger.WriteError("System Fail"); // 컴파일 에러
        //  clogger 변수는 ConsoleLogger 타입이기 때문에 인터페이스의 기본 구현 메서드인 WriteError()를 호출할 수 없습니다.

    }
}

}

0개의 댓글