[C# 고급문법] #1 프로퍼티(Property) & get/set 함수

반응형
반응형

[목차]

  1. get/set 함수
  2. 프로퍼티(Property)
  3. 자동구현 프로퍼티

* 개인적인 공부 기록용으로 작성한 포스팅 이기에, 잘못 된 내용이 있을 수 있습니다.


#1 get / set 함수

프로그래머는 정보 은닉을 위해서, 클래스 내부의 속성들을 private 혹은 protected 로 선언 합니다.예를 들어 knight 클래스의 protected로 선언된 hp 변수가 있다고 가정해 봅시다.

        class knight
        {
            protected int hp;
        }

hp 변수를 main 클래스에서 접근 하고자 하면, 아래와 같이 보호 수준 에러가 발생합니다.

        class Knight
        {
            protected int hp;
        }
        
        static void Main(string[] args)
        {
            Knight knight = new Knight();
            knight.hp = 100;
        }

외부에서도 특정 클래스의 protected / private 속성에 접근하기 위해 , 프로그래머는 Get , Set 함수 라는 것을 정의하여 사용합니다.

        class Knight
        {
            protected int hp;

            // Get Function
            public int GetHp()
            {
                return hp;
            }

            // Set Function
            public void SetHp(int hp)
            {
                this.hp = hp;
            }
        }
        
        static void Main(string[] args)
        {
            Knight knight = new Knight();
            knight.SetHp(100);
            knight.GetHp();
        }

위와 같이 public 으로 정의한 Get , Set 함수 ( Getter , Setter 함수 라고도 부릅니다. ) 를 이용해 클래스 내부의 protected / private 속성들에 접근을 하는 것이지요. * 여기 까지의 내용은 [C#] 6. OOP 은닉성 편에서도 다루었습니다.


#2 프로퍼티(Property)

하지만, 프로젝트의 범위가 커지면 이러한 Get Set 함수의 개수가 몇십개 이상으로 늘어날 것입니다. 

따라서 C#은 Get Set 함수를 관리하기 쉽도록 프로퍼티(Property)라는 문법을 제공합니다.

사용 방법은 아래와 같이, 프로퍼티 내부에 get { } set { } 형식으로 작성 하면 됩니다.

* 프로퍼티의 set접근자 내부의 value는 전달 받은 인자 값을 의미합니다.

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

이 처럼 프로퍼티(Property) 문법을 이용하면, 굳이 Get / Set 함수를 따로 정의해 줄 필요도 없고, 코드의 길이도 줄어들어 가독성도 좋아집니다.


#3 자동 구현 프로퍼티

프로퍼티(Property)를 더욱 간략화 하기 위해서 C# 7.0 버전 이상부터 자동 구현 프로퍼티 라는 문법을 제공합니다.

자동 구현 프로퍼티를 이용하면, 아래 처럼 소스코드를 한 줄로 줄이는 것 도 가능합니다.

[사용 방법] public int Hp { get; set; }
        class Knight
        {
            protected int hp;
            public int Hp { get; set; }
        }
        
        static void Main(string[] args)
        {
            Knight knight = new Knight();
            knight.Hp = 100;
            int myHp = knight.Hp;
        }
반응형

댓글

Designed by JB FACTORY