콘텐츠로 건너뛰기
Home » 프로퍼티(Property)

프로퍼티(Property)

  • by
프로퍼티(Property)

C++의 Set(), Get()

C++로 클래스를 만들면 보통 데이터의 은닉성을 위해
변수를 Private, Protected로 선언하고, Set(), Get() 함수로 읽고 쓰고 한다.

class TestClass {
    Private : int num;
    public : void SetNum(int n) {
        num = n;
    }
    int GetNum() {
        return num;
    }
}
void Main() {
    TestClass _TestClass;
    _TestClass.SetNum(10);
    cout << _TestClass.GetBum() << endl;
}

문제는 클래스의 변수가 많아질수록 Set(), Get() 함수가 가득해지기 때문에 가독성이 떨어지며,
변수를 더 추가할 때마다 매번 Set(), Get() 함수를 추가해줘야 하는 불편함이 있다.
은닉성은 지킬수 있으나, 상당히 번거롭고 귀찮은 작업이다.

C#의 Set(), Get()

C#에서는 이를 단순화하는 프로퍼티(Property)라는 변수를 제공한다.
C++의 클래스를 C#의 프로퍼티로 작성하면 아래와 같다.

class TestClass {
    private int num;
    public int Number;
    {
        set {
            num = value;
        }
        get {
            return num;
        }
    }
}
static void Main() {
    TestClass _TestClass = new TestClass();
    _TestClass.Number = 10;
    Console.WriteLine(_TestClass.Number);
}

value 라는 변수는 미리 예약된 변수로 멤버변수에 대립하는 값이 자동으로 대입 됩니다.
C++에서 사용하던 Set(), Get() 보다는 단순화시키긴 했지만 번거로운 작업이다.
.Net Freamework 3.0(C#) 부터는 이를 더욱 단순화 할수 있는 자동구현 프로퍼티가 나옵니다.

자동구현 프로퍼티

class TestClass {
    public int num {
        set;
        get;
    }
}
static void Main() {
    TestClass _TestClass = new TestClass();
    _TestClass.num = 10;
    Console.WriteLine(_TestClass.num);
}

변수에 set; get; 만 넣어주면 알아서 Set(), Get() 함수를 자동으로 구현해준다.
그래서 [자동구현 프로퍼티] 라고 표현한다.
게다가 set을 빼고 get만 넣어주면 아주 쉽게 멤버변수 읽기전용으로도 사용할수 있다.

프로퍼티 변수 초기화

객체 생성시에 손쉽게 프로퍼티 변수를 초기화 할수 있는 편리함까지 제공한다.
클래스내에 프로퍼티 변수가 선언되어 있다면 생성자를 작성하지 않아도
객체 생성시에 초기화가 가능하며, 또한 원하는 프로퍼티만 골라서 초기화를 해줄수 있다.
다음 예제를 참고해 봅시다.

class TestClass {
    public int num1 {
        set; get;
    }
    public int num2 {
        set; get;
    }
    public string name {
        set; get;
    }
    public int sum {
        get {
            return num1 + num2
        }
    }; // 읽기전용
}
static void Main() {
    TestClass _TestClass = new TestClass(num1=10, name="OhTaek");
    _TestClass.num2 = 20;
    Console.WriteLine(_TestClass.sum);
}

예전에 비하면 프로퍼티 설정함에 있어서 간단해지고 편리하게 사용할수 있게 된것같다.

댓글 남기기