속성 접근자
- get 접근자 (게터 : getter) : 특정 값 또는 특정 필드 값을 반환
- set 접근자 (세터 : setter) : value 키워드를 사용해 값을 읽어 관련 필드에 저장
- init 접근자 : set 접근자와 거의 같으나, 생성자나 개체 이니셜라이저에 의해서만 사용 가능
using System;
class PropertyPractice
{
//private 필드
private string hello;
//private 필드 값을 외부에 공개하는 속성
public string Hello
{
//get 접근자
get { return hello; }
//set 접근자 : value 키워드 사용
set { hello = value; }
}
static void Main()
{
var greeting = new PropertyPractice();
//greeting.hello로는 읽기 및 쓰기 불가능(private이므로)
greeting.Hello = "안녕하세요"; //set
Console.WriteLine(greeting.Hello); //get
}
}
전체 속성과 자동 구현 속성 (자동 속성)
위의 예제처럼 필드와 속성을 함께 사용하는 것은 전체 속성으로 원래 기본값이었으나, 자동 구현 속성이 나온 이후에는 별도의 추가적인 연산이 필요한 것이 아니면 이를 주로 사용한다. 전체 속성을 쓰기 편하게 줄여 놓은 속성으로, 자동으로 구현된 속성이라고 한다.
- 전체 속성 : 속성에 연결할 필드, get 및 set 접근자 관련 코드를 명시적으로 구현
- 자동 구현 속성(자동 속성) : 전체 속성을 간소화한 코드로, 구현을 명시적으로 제공하지 않아도 C# 컴파일러가 지원
using System;
class PropertyPractice
{
//전체 속성
private string hello1;
public string Hello1
{
get { return hello1; }
set { hello1 = value; }
}
//자동 구현 속성
public string Hello2 { get; set; }
static void Main()
{
var greeting = new PropertyPractice();
//전체 속성
greeting.Hello1 = "안녕하세요1"; //set
Console.WriteLine(greeting.Hello1); //get
//자동 구현 속성
greeting.Hello2 = "안녕하세요2"; //set
Console.WriteLine(greeting.Hello2); //get
}
}
- 자동 속성 이니셜라이져 : 속성을 선언과 동시에 기본값으로 초기화
using System;
class PropertyPractice
{
//자동 속성 이니셜라이저
public string Hello { get; set; } = "안녕하세요";
static void Main()
{
var greeting = new PropertyPractice();
Console.WriteLine(greeting.Hello);
}
}
읽기 전용 속성과 쓰기 전용 속성
접근자 중 하나만을 사용하는 것으로 읽기/쓰기 전용 속성을 구현할 수 있다. 또는 특정 접근자에 private 또는 protected을 앞에 붙이는 방법으로도 구현할 수 있다.
- 읽기 전용 속성 : set 접근자가 없거나 private 등의 접근 제한자가 있음, set 접근자 대신 init 접근자 사용
- 쓰기 전용 속성 : get 접근자가 없거나 private 등의 접근 제한자가 있음
using System;
class PropertyPractice
{
public string RO1 { get; } = "Read-Only";
public string RO2 { get; private set; } = "Read-Only";
public string RO3 { get; init; } = "Read-Only";
private string wo1;
public string WO1
{
set { wo1 = value; }
}
public string WO2 { set; private get; } = "Read-Only";
static void Main()
{
PropertyPractice p = new PropertyPractice();
Console.WriteLine(p.RO1);
Console.WriteLine(p.RO2);
Console.WriteLine(p.RO3);
p.WO1 = "Write-Only";
p.WO2 = "Write-Only";
}
}
식 본문 속성 (expression bodied property)
식 본문 속성은 => 연산자를 활용해 속성을 축약해 표현하는 것으로, 값을 그대로 할당 및 가져오기보다는 특정한 연산을 해서 값을 할당하거나 가져올 때 사용한다.
- 식 본문 속성의 활용
using System;
class PropertyPractice
{
public string Name { get; set; }
public DateTime EnterDate { get; set; } = DateTime.Today;
//식 본문 속성
public DateTime GraduateDate { get => (EnterDate.AddYears(4)); }
static void Main()
{
PropertyPractice p = new PropertyPractice();
p.Name = "김밥";
p.EnterDate = new DateTime(2000, 02, 23);
Console.WriteLine($"{p.Name}님의 졸업일 : {p.GraduateDate}");
}
}
private 접근자 사용자
원칙적으로 private를 선언하려면 get set 모두 구현 되어있어야 한다
클래스 내부에서만 get set 하고자 할 때 유용하게 쓸 수 있다.
public class GameManager : Monobehaviour
{
public static Player player
{
get;
private set;
}
void Init()
{
player = FindAnyObjectByType<Player>();
}
}
// 타 클래스에서 player에 값 설정 불가능 오직 GameManager에서만
출처) https://suspiciously-useful.tistory.com/30
'프로그래밍 언어 > C#' 카테고리의 다른 글
[C#] unsafe 키워드 소스코드 (0) | 2025.06.17 |
---|---|
[C#] Enum에 Name List / Value List 가져오기 (0) | 2025.05.01 |
[C#] 7.0 튜플 (Tuple) (0) | 2025.02.09 |
[C#] switch문에 추가된 기능 (버전 7~9) (0) | 2025.02.03 |
[C#] default와 new() 제약 조건 사용하기 (0) | 2024.12.16 |