C#에서 인터페이스(Interface)는 속성(property), 메서드(method), 이벤트(event) 등을 멤버로 정의하는 일종의 계약서 역할을 합니다. 중요한 점은 인터페이스가 멤버에 대한 선언만 포함한다는 것입니다. 실제 구현은 인터페이스를 상속받는 클래스(파생 클래스)의 책임이며, 이를 통해 파생 클래스들이 반드시 따라야 할 표준 구조를 제공할 수 있습니다.
인터페이스 이름은 관례상 대문자 'I'로 시작하며(예: ITransactions), 이를 통해 개발자가 코드만 보고도 인터페이스임을 쉽게 식별할 수 있습니다.
인터페이스 선언 방법
C#에서 interface 키워드를 사용해 인터페이스를 선언하는 기본 문법은 다음과 같습니다.
public interface ITransactions {
// 인터페이스 멤버
void showTransaction();
double getAmount();
}위 코드처럼 인터페이스 내부에는 메서드의 시그니처(이름, 매개변수, 반환 타입)만 작성하고, 본문(body)은 정의하지 않습니다. 접근 제한자도 명시하지 않으며, 모든 멤버는 기본적으로 public으로 간주됩니다.
C# 인터페이스 사용 예제
다음은 인터페이스를 선언하고 이를 클래스에서 구현하여 사용하는 전체 예제입니다.
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
namespace Demo {
// 인터페이스 선언
public interface ITransactions {
// 인터페이스 멤버
void showTransaction();
}
// 인터페이스를 상속받아 구현하는 클래스
public class Transaction : ITransactions {
private string tCode;
private string date;
// 기본 생성자
public Transaction() {
tCode = " ";
date = " ";
}
// 매개변수가 있는 생성자
public Transaction(string c, string d) {
tCode = c;
date = d;
}
// 인터페이스 멤버 구현
public void showTransaction() {
Console.WriteLine("Transaction ID: {0}", tCode);
Console.WriteLine("Date: {0}", date);
}
}
class Tester {
static void Main(string[] args) {
Transaction t1 = new Transaction("8877", "6/25/2018");
Transaction t2 = new Transaction("5656", "7/25/2018");
t1.showTransaction();
t2.showTransaction();
Console.ReadKey();
}
}
}실행 결과
Transaction ID: 8877 Date: 6/25/2018 Transaction ID: 5656 Date: 7/25/2018
핵심 정리
- 인터페이스는 멤버의 선언만 포함하며, 구현은 상속받는 클래스가 담당합니다.
- 클래스가 인터페이스를 상속받으면(
:사용), 인터페이스의 모든 멤버를 반드시 구현해야 합니다. - 인터페이스를 통해 여러 클래스에 공통된 규약(표준 구조)을 강제할 수 있어 코드의 일관성과 유지보수성이 향상됩니다.
- 인터페이스 이름은 관례적으로 'I' 접두사를 붙여 명명합니다.