ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1072) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (348) N
      • C++ (167)
      • C# (90) N
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 알고리즘
  • 그래픽스
  • SQL
  • C++
  • 백준
  • 클래스
  • 유니티
  • c#
  • 프로그래머스
  • 함수
  • 배열
  • C
  • 오블완
  • 티스토리챌린지
  • 파이썬
  • 포인터
  • string
  • Unity
  • 언리얼
  • 문자열

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

프로그래밍 언어/C#

[C#] 속성 (property) 정리

2025. 6. 16. 10:55

속성 접근자

  • 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
    '프로그래밍 언어/C#' 카테고리의 다른 글
    • [C#] unsafe 키워드 소스코드
    • [C#] Enum에 Name List / Value List 가져오기
    • [C#] 7.0 튜플 (Tuple)
    • [C#] switch문에 추가된 기능 (버전 7~9)
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바