2024. 2. 19. 14:28ㆍC#
인터페이스의 선언
interface 키워드를 이용해서 선언합니다
클래스의 선언과 비슷해 보이지만 메소드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있다는 차이가 있습니다.
interface 인터페이스 이름
{
반환형식 메소드이름1( 매개변수 목록 );
반환형식 메소드이름2( 매개변수 목록 );
반환형식 메소드이름3( 매개변수 목록 );
// ...
}
특징
인터페이스는 구현부가 없습니다.
클래스는 접근 제어를 설정하지 않으면 기본적으로 private로 선언되지만,
인터페이스는 접근 제한 한정자를 사용할 수 없고 모든 것이 public으로 선언됩니다.
인스턴스도 만들 수 없습니다.
대신 이 인터페이스를 상속받는 클래스의 인스턴스를 만드는 것은 가능하다.
규칙
파생 클래스는 인터페이스에 선언되어 있는 모든 메소드(및 프로퍼티)를 구현해줘야 하며,
이 메소드들은 public으로 선언한다.
namespace Interface
{
// ILonger 인퍼페이스 생성
internal interface ILonger
{
void WriteLog(string message);
}
}
namespace Interface
{
// ILonger 인터페이스를 상속받는 파생 클래스 ConsoleLogger
class ConsoleLogger : ILonger
{
public void WriteLog(string message)
{
Console.WriteLine("{0} {1}", DateTime.Now.ToLocalTime(), message);
}
}
}
위와 같이 선언한 클래스는 다음과 같이 인스턴스화가 가능하다.
namespace Interface
{
// 파생 클래스의 사용
class MainClass
{
static void Main(string[] args)
{
ILonger logger = new ConsoleLogger();
logger.WriteLog("현재 날짜 및 시간 출력");
}
}
}
위 코드에서 보는 것처럼 인터페이스는 인스턴스를 못 만들지만, 참조는 만들 수 있습니다.
이 참조에 파생 클래스의 객체의 위치를 담는 것이죠.
파생 클래스는 부모 클래스와 같은 형식으로 간주합니다.
이것은 인터페이스와 인터페이스를 상속받는 클래스의 관계에도 그대로 적용됩니다.
즉, ConsoleLogger의 객체는 ILogger의 객체로 취급할 수 있음을 의미합니다.
인터페이스 작명법
인터페이스 이름 앞에 'I'를 붙이는 것이 관례이다.
인터페이스는 약속이다
인터페이스는 소프트웨어 내에서 USB와 같은 역할을 합니다.
클래스가 따라야하는 약속이 되는 셈입니다.
이 약속은 인터페이스로부터 파생될 클래스가 어떤 메소드를 구현해야 할지를 정의합니다.
예를 들어 앞선 예시의 ILogger 인터페이스는 자신으로부터 파생될 클래스가 반드시 WriteLog() 메소드를 구현하도록 강제합니다. 어떤 클래스든 ILogger를 상속받아 ILogger에 선언되어 있는 WriteLog() 메소드를 구현하면 ILooger의 역할을 할 수 있습니다.
'C#' 카테고리의 다른 글
[C#] 값 형식과 참조 형식의 메모리 저장 방식 차이 (0) | 2024.03.01 |
---|---|
[C#] 자료구조의 역사 (0) | 2024.02.14 |