- 프로퍼티는 필드와는 달리 Validation을 할 수 있고, 읽기/쓰기 전용과 같은 제한을 할 수 있다.
- 객체 지향 관점에서는 불필요한 정보를 숨길 수 있는 정보 은닉의 효과도 가져온다.
1. 프로퍼티 선언
- 프로퍼티는 get/set 구문을 사용하여 선언한다.
- get/set 구문에는 public, private와 같은 접근 제한자 설정이 가능하다.
public class Employee
{
private int birthYear;
private string name;
public int BirthYear
{
get
{
return this.birthYear;
}
set
{
// validation
if(value < 1900)
{
throw new ArgumentException("Error");
}
this.birthYear = value;
}
}
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
}
2. 자동 구현 프로퍼티
- 특별한 로직이 없다면 C# 3.0 부터 지원하는 자동 구현 프로퍼티를 사용하면 보다 간결한 코드를 작성할 수 있다.
- 자동 구현 프로퍼티는 별도 구문 없이 get/set 으로만 선언을 하며 반드시 get/set이 한 쌍으로 존재해야 한다.
- 만약 읽기 전용일 경우는 set 구분의 접근 제한자를 private로 선언해 주면 된다.
public class Employee
{
public int birthYear { get; private set; }
public string name { get; set; }
}
3. 인덱서(Indexer)
- 프로퍼티가 클래스의 필드처럼 사용되는 것처럼 인덱서는 클래스 자체를 배열과 같이 사용할 수 있도록 선언하는 것.
- String 클래스처럼 인덱스를 통해 값에 접근할 수 있다.
- 선언은 this 구분에 get/set 프로퍼티를 정의해 주면 된다.
using System;
using System.Linq;
namespace SqlerCSharp
{
// Generic
public class Product<T>
{
public T[] ProductItem;
// 기본 생성자일 경우 기본 배열 크기 설정
public Product() : this(10) { }
public Product(int size)
{
this.ProductItem = new T[size];
}
public T this[int index]
{
get
{
return ProductItem[index];
}
set
{
ProductItem[index] = value;
}
}
}
class Program
{
static void Main(string[] args)
{
Product<string> item = new Product<string>();
item[0] = "꿀과메기";
item[1] = "새우깡";
item[2] = "자갈치";
Console.WriteLine("item[0] : {0}", item[0]);
Console.WriteLine("item[{0}] : {1}", item.ProductItem.Count() - 1,
item[item.ProductItem.Count() -1]);
}
}
}
'Language > C#' 카테고리의 다른 글
[C#] 확장 메소드(Extension Method) (0) | 2020.12.26 |
---|---|
[C#] ref / out / params (0) | 2020.12.26 |
[C#] 클래스 (0) | 2020.12.26 |
[C#] 문자열 다루기 - StringBuilder (0) | 2020.12.23 |
[C#] 문자열 다루기 - string, 문자열 포맷 (0) | 2020.12.23 |