5. 속성(Property)과 인덱서(Indexer)
● 속성(Property)
속성은 특정 값을 설정할 때 메서드처럼 호출하고 값을 가져오는 경우 Field처럼 호출하여 사용할 수 있도록 하는 것으로 해당 기능을 구현하기 위한 구문이 간소화될 수 있습니다.
namespace mylibrary;
public class Car
{
public int Speed
{
get;
set;
}
public int RPM => Speed * 2;
}
예제에서는 Speed와 RPM이라는 2개의 Property를 정의하였습니다. Speed는 값을 읽는 get과 값을 설정하는 set으로 인해 int형식의 값을 설정하고 가져올 수 있고 RPM은 Speed에서 *2를 연산한 결과만을 읽을 수 있는 Property가 되었습니다.
using mylibrary;
Car sedan = new();
sedan.Speed = 80;
Console.WriteLine($"{sedan.RPM}");
//160
Speed는 C# 6 버전 이후부터 두루 사용 가능한 전통적인 Property의 정의방식으로 구현된 것이며 RPM은 람다식을 이용한 방식입니다. 만약 RPM을 Speed버전으로 구현하게 된다면 아래와 같이 할 수 있을 것입니다.
public int RPM
{
get {
return Speed * 2;
}
}
Speed에서 구현된 get과 set은 각각 값의 설정과 확인을 의미하는 것인데 C#초기에는 별도의 변수를 만들고 get과 set에서 실제 값이 적용되도록 해야 하지만
int speed;
public int Speed
{
get
{
return speed;
}
set
{
speed = value;
}
}
단순히 get과 set을 설정하는 것만으로 compiler에서 자동으로 위와 같은 처리를 진행해 주므로 좀 더 편리하게 get과 set을 사용할 수 있는 것입니다. 그러나 자동적으로 처리되는 부분은 위의 예제까지이며 뭔가 값을 설정하거나 가져오는 데 있어서 특별한 처리를 해야 한다면 get과 set에서 해당 부분을 직접 구현해야 합니다.
int speed;
public int Speed
{
get
{
return speed;
}
set
{
if (value > 80)
throw new Exception("제한 속도 초과!");
speed = value;
}
}
● 인덱서
인덱서는 속성을 배열로서 사용할 수 있도록 해주는 장치입니다.
string[] passengers = { "홍길동", "홍길순", "홍길영", "홍길석" };
public string this[int index]
{
get {
return passengers[index];
}
}
따라서 배열과 완전히 같은 방식으로 속성에 접근할 수 있습니다.
Car sedan = new();
Console.WriteLine($"첫번째 승객 : {sedan[0]}");
Console.WriteLine($"두번째 승객 : {sedan[1]}");
Console.WriteLine($"세번째 승객 : {sedan[2]}");
Console.WriteLine($"네번째 승객 : {sedan[3]}");
//첫번째 승객 : 홍길동
//두번째 승객 : 홍길순
//세번째 승객 : 홍길영
//네번째 승객 : 홍길석
'.NET > C#' 카테고리의 다른 글
[C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record) (0) | 2022.06.24 |
---|---|
[C#] C#과 OOP(Object-Oriented Programming) - 6. 패턴 매칭(Pattern Matching) (0) | 2022.06.24 |
[C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드) (0) | 2022.06.24 |
[C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field) (0) | 2022.06.24 |
[C#] C#과 OOP(Object-Oriented Programming) - 2. 클래스 라이브러리 (Class library) (0) | 2022.06.24 |