본문 바로가기

메모장/C#

C#의 자동 구현 프로퍼티 (Auto-Implemented Properties, 자동 구현 속성)

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#] public 필드 vs 자동 구현 프로퍼티 비교 분석

이 글은 C#에서 public 필드(Field)와 자동 구현 프로퍼티(Auto-Implemented Property) 중 무엇을 사용해야 하는가 고민에서 시작하여, 필드와 자동 구현 프로퍼티의 차이점, 성능에 관해 실험해본 내용을 다

constructionsite.tistory.com