티스토리 뷰

프로그래밍/C#

Property(프로퍼티), Indexer(인덱서)

알 수 없는 사용자 2016. 7. 30. 13:12

Property

 

accessor(접근자) mutator(설정자)를 대체할 수 있는 특수한 메소드.

 

class Person

{

private int age;        // private (데이터 타입) (변수 명)    형태로 변수 선언

public int Age        // public (데이터 타입) (메소드 이름)    형태로 메소드 선언

{

get

{

return age;    // Age 메소드를 통해 가져올 private 멤버를 반환

}

set

{

age = value;    // Age 메소드를 통해 값을 저장할 private 멤버에 value를 세팅

}

}

}

 

 

 

자동 구현 프로퍼티

 

private 속성의 필드를 프로퍼티와 동시에 생성해서, 따로 생성해주고 연결해 주는 불편함을 줄여 주는 프로퍼티.

위의 일반 프로퍼티처럼 변수 선언 따로, 프로퍼티 정의 따로 해 줄 필요 없이 프로퍼티만 정의해 주면

프로퍼티 명을 public 변수처럼 사용할 수 있음.

하지만, 자동 구현 프로퍼티와 public 변수와는 엄연히 다르다.

 

class Person

{

public int Age            // 변수를 별도로 선언하지 않고 프로퍼티만 public으로 선언하면 자동으로 private 필드까지 만들어짐

{                            

get; set;              // 따로 정의해주지 않아도 자동으로 get, set까지 구현

} = 20;                     // C# 6 버던 이상에서는 다음과 같이 초기화 가능

 

 

 

 

프로퍼티를 이용한 초기화

 

객체 생성 시 프로퍼티를 이용해서 초기화를 할 수 있다.

형식은 다음과 같다.

 

(클래스 명) (변수 명) = new (클래스 명)

{

프로퍼티1 = 값1,

프로퍼티2 = 값2,

};

 

 

 

익명 형식

 

클래스나 구조체 선언 없이, 임시로 만들어 사용할 수 있는 데이터 타입이다.

아래와 같이 var 키워드와 프로퍼티를 이용해서 선언할 수 있다.

 

var person = new { Age = 20 };

 

 

 

Indexer

 

클래스를 배열처럼 사용할 수 있도록, 클래스 내의 배열 데이터를 배열 연산자 [ ]를 사용해

접근 가능하게 해 주는 프로퍼티와 유사한 기능이다.

 

class MyArray

{

private int[] arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};    // private 속성의 배열 선언

 

public int this[int index]

{

get

{

return arr[index]

}

set

{

arr[index] = value;

}

}

}

 

//********************************************************************************************************

 

static void Main(string[] args)

{

MyArray myArray = new MyArray();

 

myArray[0] = 9;        // arr[0]에 9 대입

}

 

 

 

인터페이스와 추상 클래스의 프로퍼티

 

인터페이스의 경우 프로퍼티는 메소드와 동일하게 선언만 가능하고,

구현은 상속하는 클래스에서 해 주어야 한다.

 

interface IPerson

{

int Age

{

get;

set;

}

}

 

class Baby : IPerson

{

public int Age    // 자동 생성 프로퍼티도 가능!

{

get;

set;

}

}

 

추상 클래스는 구현이 되어 있는 프로퍼티와, 구현이 되지 않은 추상 프로퍼티를 사용할 수 있다.

추상 프로퍼티는 추상 메소드와 동일하게 선언 시 abstract 키워드를 사용해야 하고

반드시 상속하는 클래스에서 오버라이드 해 주어야 한다.

'프로그래밍 > C#' 카테고리의 다른 글

new 한정자, sealed Keyword  (0) 2016.07.31
as Keyword, is Keyword - 타입 캐스팅  (0) 2016.07.29
가변 길이 매개 변수  (0) 2016.07.29
nullable 데이터 타입, var Keyword  (0) 2016.07.29
ref keyword, out keyword  (0) 2016.07.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함