본문 바로가기
프로그래밍/C#

C# 속성(Property)이란 무엇인가

by bantomak 2024. 12. 12.
반응형

속성(Property)이란

속성(Property)은 C#에서 클래스, 구조체 또는 인터페이스필드와 비슷한 역할을 하지만, 더 안전하고 유연하게 데이터를 캡슐화 할 수 있도록 설계된 멤버이다. 속성을 사용하면 필드에 직접 접근하지 않고도 데이터를 읽거나 수정할 수 있다.

 

get 접근자와 set 접근자를 사용하여 데이터를 읽거나 쓸 때 추가적인 로직을 정의할 수 있다.

예제로 알아보는 속성 기본 구현

public class Person
{
    // 필드
    private string name; 

    // 속성
    public string Name
    {
        get { return name; }  // 값을 읽음
        set { name = value; } // 값을 설정
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.Name = "Alice"; // set 접근자 호출
        Console.WriteLine(person.Name); // get 접근자 호출
    }
}

자동 구현 속성(Auto-Implemented Proprerty)

별도의 구현없이 아래와 같이 선언만 해줘도 자동으로 구현해준다.

// 자동 구현 속성
public string Name { get; set; }

// 아래 코드를 자동으로 구현
public string Name
{
    get
    {
        return Name;
    }
    
    set
    {
        Name = value;
    }
}

초기값이 있는 자동 구현 속성

속성 선언 시 초기값 지정이 가능하다.

public string Name { get; set; } = "Unknown";

init 접근자 (C# 9.0 이상)

초기값 설정 이후에 해당 값을 변경할 수 없도록 한다.

public class Configuration
{
    public string Host { get; init; }
    public int Port { get; init; }
}

var config = new Configuration { Host = "localhost", Port = 8080 };
// config.Host = "newhost"; // 컴파일 오류 (init 속성은 변경 불가)

속성의 주요 장점

  • 데이터 캡슐화 : 속성은 데이터를 캡슐화하여 직접 필드에 접근하지 못하게 보호한다.
  • 유지보수 용이성 : 속성을 이용하면 필드에 바로 접근하는 구조가 아니기 때문에 내부 구현이 변경되더라도 외부 코드를 수정하지 않고도 동작을 유지 할 수 있다.
  • 접근 제어 : get, set 접근자를 통해서 데이터의 읽기/쓰기 권한을 세밀하게 제어할 수 있다.

속성(Property) vs 필드(Field)

MSDN의 설명을 참고해보자면 속성은 스마트 필드(Smart Field)의 한 형태라고 한다. 기능이 추가된 필드라고 생각하면 이해하기 편하다.

참고 사이트

 

속성 - C#

C#의 속성은 접근자 메서드를 사용하여 공용 데이터 멤버인 것처럼 private 필드의 값을 읽고, 쓰고, 계산하는 멤버입니다.

learn.microsoft.com

댓글