C#에는 프로퍼티라는 개념이 있습니다. 프로퍼티는 객체지향 패러다임의 정보은닉을 좀 더 간결하고 간단하게 구현 할 수 있도록 해줍니다.
class MyClass
{
private string name;
public string GetName(){
return name;
}
public void SetName(string name){
this.name = name;
}
}
위 와 같은 코드를
class MyClass
{
private string name;
public string Name {
get { return name; }
set { name = value; }
}
}
이렇게 간단하게 구현할 수 있습니다.
자동 구현 프로퍼티를 사용하면 이를 더 간단하게 구현 할 수 있습니다.
class MyClass
{
public string Name{ get; set;}
}
class MyClass2
{
public string Name{ get; private set;}
}
이렇게 자동 구현 프로퍼티를 사용하여 구연할 경우 컴파일러가 자동으로 private 필드를 생성해줍니다. 마치 기본 생성자 처럼요.
다만, private 필드를 생성할 수 없는 인터페이스에서는 자동 완성 프로퍼티를 사용 할 수 없습니다.
자동완성 프로퍼티는 필드에 기본적인 Get, Set 작업만을 할 때 사용합니다. get 속성 접근자나, set 속성 접근자를 통해 사용자 지정 코드를 작성할 경우에는 자동완성 프로퍼티를 사용 할 수 없습니다.
class MyClass
{
// 잘못된 구현
public string Name {
get { return Name; }
set { Name = value; }
}
}
위와 같이 코드를 작성할 경우 Name 프로퍼티에 접근하면 무한루프에 빠집니다.
생성자를 구현하면 컴파일러가 기본 생성자를 생성하지 않듯이, 사용자 지정 코드를 구현하면 컴파일러는 private 필드를 생성해주지 않습니다.
C# 6 이상의 버전에서는 자동구현 프로퍼티를 필드와 유사하게 초기화 할 수 있습니다.
class MyClass
{
public string Name{ get; set;} = "MyName";
}
+
public필드와 자동구현 프로퍼티를 비교 분석한 글 : https://constructionsite.tistory.com/38
'메모장 > C#' 카테고리의 다른 글
[C#] 코드의 문서화를 도와주는 Doxygen (2) | 2022.11.25 |
---|---|
[C#] 자꾸 까먹는 C# 디렉토리 구분자 가져오기 (0) | 2020.02.20 |
[C# Debug] Zip 파일 압축 해제 문제 - System.IO.Compression.ZipFile.ExtractToDirectory (0) | 2020.01.29 |
C# params, ref와 in, out 매개 변수 한정자 (0) | 2019.10.29 |