관리 메뉴

제목없음

C# 속성과 인덱서 사용하기 본문

프로그램 작성/컴퓨터 언어

C# 속성과 인덱서 사용하기

다람군 2013.05.14 17:45

C#에는 다른 언어들과 살짝 생소한 문법들이 몇 개 존재합니다. 속성이 그 중 하나입니다. 인덱서는 C++에도 비슷한 게 있으니(연산자 오버로드 중에서 [] 오버로드) 생소하지는 않군요.

 

1. 속성 (Property)

속성은 변수의 형태로 함수를 사용하는 특이한 방법으로, PHP, Ruby, Objective-C에서도 비슷한 기능을 구현할 수 있습니다. 단, 이 세 개의 언어는 함수로 구현하지만 속성은 약간 다른 형태로 구현됩니다.

 

접근지정자 자료형 속성이름

{

    get { return 코드; }

    set { 코드; }

 

위의 형태로 구성되는데, set에서는 특수한 변수로 value라는 이름을 사용할 수 있습니다. value 변수에는 속성으로 들어온 값이 저장되어 있습니다. get에서는 반드시 값을 반환해야 하며, 예외적으로 throw로 속성이 끝나면 반환하지 않아도 됩니다.

 

속성에 접근할 때에는 일반 변수처럼 접근하면 됩니다. 속성 이름에 = 연산자를 이용해 값을 넣으면 set이 호출되고, 다른 변수에 속성을 =로 넣으면 get이 호출되는 형식입니다.

 

반드시 위의 형태로 구성해야 하는 것은 아닙니다. get 부분만 있으면 Readonly 속성이 되며, set 부분만 있으면 Writeonly 속성이 됩니다. get과 set에 따로 접근지정자를 지정해줄 수 있습니다. 속성 자체가 public이라도 set이 private이면 속성에서의 set은 자기 자신만 사용할 수 있지요.

 

1.1 자동 속성 (Automatic Properties, 또는 Auto-implemented Property)

또한 class에서 get; set;의 형태로만 사용할 경우(get;만 쓰거나 set;만 써도 됨) Automatic Properties라고 하여 내부를 구현하지 않아도 알아서 속성이 구현되는 방법이 있는데, 속성에서 어떠한 기능을 구현하지 않을 경우(최대값/최소값 처리나 함수 호출 등을 하지 않을 경우) 사용할 수 있습니다. 매우 간편하기에 많이 사용되고 있습니다.

 

단, interface에서 get; set;만 쓸 경우 구현해야 하는 속성임을 뜻하므로 자동 속성으로는 사용되지 않으며, 속성에 abstract가 붙어 추상 속성이 될 경우에도 구현해야 하는 속성임을 뜻해 자동 속성으로는 사용되지 않습니다.

 

2. 인덱서 (Indexer)

인덱서는 C++에서는 연산자 오버로드를 통해 사용했겠지만 C#에서는 속성의 형태로 사용합니다. 형태는 아래와 같습니다.

 

접근지정자 자료형 속성이름[인덱스자료형 인덱스변수, ...]

{

    get { return 코드; }

    set { 코드; }

 

인덱서에서 중요한 것은 인덱스 변수는 여러 개를 가질 수 있다는 점입니다. C#의 2차원 배열을 생각하시면 됩니다. 인덱스 자료형도 int등의 정수 뿐 아니라 문자열, 객체 등 모두 적용할 수 있습니다.

 

사용할 때에는 배열 변수처럼 사용하시면 됩니다.

0 Comments
댓글쓰기 폼
Prev 1 2 3 4 5 6 7 Next