Programming/C#
[Programming/C#] 인터페이스의 프로퍼티
scii
2020. 9. 14. 01:02
인터페이스는 메소드뿐만 아니라 프로퍼티와 인덱서도 가질 수 있다. 프로퍼티나 인덱서를 가진 인터페이스를 상속하는 클래스가 반드시 해당 프로퍼티와 인덱서를 구현해야 하는 것은 물론이다.
당연한 이야기지만 인터페이스에 들어가는 프로퍼티는 구현을 갖지 않는다. 인터페이스의 프로퍼티 선언이 클라스의 자동 구현 프ㅗ퍼티 선언과 그 모습이 동일하다. 다음은 인터페이스의 프로퍼티 선언 형식이다.
interface 인터페이스이름
{
public 형식 프로퍼티1
{
get; set;
}
public 형식 프로퍼티2
{
get; set;
}
}
다음은 프로퍼티를 갖고 있는 인터페이스와 이를 상속하는 파생 클래스의 예이다.
interface INameInfo
{
string Name
{
get; set;
}
}
class NameInfo : INameInfo
{
private string name;
// 파생 클래스는 부모 인터페이스에 선언된 모든 프로퍼티를 구현해야 한다.
public string Name
{
get { return name; }
set { name = value; }
}
}
인터페이스의 프로퍼티 사용 예
using System;
namespace CSharpExample
{
interface INamedValue
{
/*
* 자동 구현 프로퍼티처럼 구현이 없지만, C# 컴파일러는 인터페이스의
* 프로퍼티에 대해서는 자동으로 구현해주지 않는다.
* 당연한 이야기다. 인터페이스는 어떤 구현도 가지지 않기 때문이다.
*/
string Name
{
get; set;
}
string Value
{
get; set;
}
}
class NamedValue: INamedValue
{
public string Name
{
get; set;
}
public string Value
{
get; set;
}
}
internal class MainApp
{
static int Main(string[] args)
{
NamedValue name = new NamedValue()
{
Name = "이름",
Value = "테스트"
};
NamedValue height = new NamedValue()
{
Name = "키",
Value = "180"
};
NamedValue weight = new NamedValue()
{
Name = "몸무게",
Value = "82"
};
Console.WriteLine($"{name.Name}: {name.Value}");
Console.WriteLine($"{height.Name}: {height.Value}");
Console.WriteLine($"{weight.Name}: {weight.Value}");
return 0;
}
}
}
/* 결과
이름: 테스트
키: 180
몸무게: 82
*/