본문 바로가기
유니티 공부/C# 문법

C# 문법 - property(프로퍼티)

by 코딩하는 돼징 2023. 4. 16.
반응형

1. 은닉성

클래스 내부 필드의 정보 노출을 방지하기 위해 접근 한정자를 protected, private로 선언한다.

외부에서 이 필드에 접근하기 위해서  Set, Get함수를 정의한다.

public class testScore
{
    public string name = "piggy";
    private int score = 100;
    
    // set
    public void setScore(int x)
    {
        score = x;
    }
    
    // get
    public int getScore()
    {
        return score;
    }
}

testScore testscore = new testScore();
testscore.setScore(120);
int score = testscore.getScore();
Console.WriteLine(score);


2. 프로퍼티

프로젝트의 범위가 방대해지면 이러한 함수를 일일히 입력하면서 사용하기가 어려워질 것이다. 프로퍼티를 사용하게 되면 함수 두가지를 안만들어도 되고 안에서 하나로 관리할 수 있게 된다.

 

get - 값을 꺼낼때 사용(public 멤버 함수의 리턴을 통해서 private 멤버의 값 내보내)

set - 값을 넣을때 사용(public 멤버 함수의 매개변수를 통해서 private 멤버의 값을 할당 )

public class testScore
{
    public string name = "piggy";
    private int score = 120;
    public int score_property
    {
        get { return score; }
        set { score = value; } // value는 속성에 할당된 값
    }
}
testScore testscore = new testScore();
testscore.score_property = 120;
int score = testscore.score_property;
Console.WriteLine(score);


01 set,get 둘 중 하나만 사용하고 싶은 경우

protected int age = 7;

public int Age
{
    get { return age; }
}

02 내부에서만 set을 하고 싶은 경우

접근 한정자 set을 접근 한정자 private로 설정하면 외부에서는 사용할 수 없다.

public int Weight
{
    // 값을 꺼내올때 사용
    get { return weight; }
    // 값을 넣을때 사용
    private set { weight = value; }
}

같은 class내에서는 액세스 가능하다.

public void PinkPig()
{
    Weight = 100;
}

3. 자동 구현 프로퍼티

필드 선언을 하지 않고 한줄의 코드로 만들 수 있다는 큰 장점을 가지고 있다.

public int Weight{ set; get;}

이 한 줄의 코드는 아래 세줄의 코드와 같다.

private int _weight;
public int GetWeight() { return _weight; }
public void SetWeight(int _weight) { this._weight  = _weight; }

이러한 초기화 문법도 가지고 있다.

public int Weight{ set; get;} = 100

 

 

 

 

본 게시글은 MMORPG Part1을 수강하고 정리한 글입니다.

https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1/dashboard

반응형

'유니티 공부 > C# 문법' 카테고리의 다른 글

C# 문법 - Event  (0) 2023.04.18
C# 문법 - Delegate(대리자)  (0) 2023.04.16
C# 문법 - virtual vs abstract vs interface  (0) 2023.04.16
C# 문법 - interface  (0) 2023.04.14
C# 문법 - abstract  (0) 2023.04.14

댓글