티스토리 뷰
accessor(접근자) mutator(설정자)를 대체할 수 있는 특수한 메소드.
{
private int age; // private (데이터 타입) (변수 명) 형태로 변수 선언
public int Age // public (데이터 타입) (메소드 이름) 형태로 메소드 선언
{
get
{
return age; // Age 메소드를 통해 가져올 private 멤버를 반환
}
set
{
age = value; // Age 메소드를 통해 값을 저장할 private 멤버에 value를 세팅
}
}
}
private 속성의 필드를 프로퍼티와 동시에 생성해서, 따로 생성해주고 연결해 주는 불편함을 줄여 주는 프로퍼티.
위의 일반 프로퍼티처럼 변수 선언 따로, 프로퍼티 정의 따로 해 줄 필요 없이 프로퍼티만 정의해 주면
프로퍼티 명을 public 변수처럼 사용할 수 있음.
하지만, 자동 구현 프로퍼티와 public 변수와는 엄연히 다르다.
{
public int Age // 변수를 별도로 선언하지 않고 프로퍼티만 public으로 선언하면 자동으로 private 필드까지 만들어짐
{
get; set; // 따로 정의해주지 않아도 자동으로 get, set까지 구현
} = 20; // C# 6 버던 이상에서는 다음과 같이 초기화 가능
}
프로퍼티를 이용한 초기화
객체 생성 시 프로퍼티를 이용해서 초기화를 할 수 있다.
형식은 다음과 같다.
(클래스 명) (변수 명) = new (클래스 명)
{
프로퍼티1 = 값1,
프로퍼티2 = 값2,
};
클래스나 구조체 선언 없이, 임시로 만들어 사용할 수 있는 데이터 타입이다.아래와 같이 var 키워드와 프로퍼티를 이용해서 선언할 수 있다.
var person = new { Age = 20 };
클래스를 배열처럼 사용할 수 있도록, 클래스 내의 배열 데이터를 배열 연산자 [ ]를 사용해접근 가능하게 해 주는 프로퍼티와 유사한 기능이다.
{
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 |