C#

프로퍼티(Property)

코다람쥐 2022. 1. 25. 17:56

1. 은닉성

객체지향의 은닉성을 지키기위해서 캡슐화를 통해 메소드를 사용하여 멤버변수에 접근하거나 반환받는 방식을 사용했다.

캡슐화 사용예시

    class Orc
    {
        protected int hp;
        protected int attack;

        int GetHp() { return hp; }
        void SetHp(int hp) { this.hp = hp; }
        int GetAttack() { return attack; }
        void SetAttack(int attack) { this.attack = attack; }
    }

 

2. get, set(프로퍼티)

프로퍼티를 사용하면 더 이상 Get과 Set관련된 함수를 따로 만들지 않아도 된다.

get, set 선언방법

        public int Hp
        {
            get { return hp; }
            set { hp = value; }
        }
        public int Attack
        {
            get { return attack; }
            set { attack = value; }
        }

value는 c#에서 제공하는 키워드이다.

 

set함수와 private

        public int Hp
        {
            get { return hp; }
            private set { hp = value; }
        }

private을 통해 외부에서 사용을 금지할 수 있다.

 

메인함수에서 사용

        static void Main(string[] args)
        {
            Orc orc = new Orc();
            int hp = orc.Hp; // get 자동호출
            orc.Hp = 3; // set 자동호출
        }

 

3. 자동완성 프로퍼티

사실 get, set과 멤버변수도 일일이 타이핑 해주는 게 귀찮을 수 있다. 그래서 c#에서는 자동완성 프로퍼티를 지원해준다.

내용

        public int Hp { get; set; }

        // private int _hp;
        // public int GetHp() { return _hp; }
        // public void SetHp(int value) { _hp = value; }

위에 처럼 코드를 정의해주면 실제로는 보이지 않는 주석안의 내용이 클래스 안에 자동으로 포함이된다.

 

초기화

public int Hp { get; set; } = 100;

이런식으로 프로퍼티를 선언함과 동시에 변수를 초기화 할 수 있다.