본문 바로가기

Programming/C&CPP

Visual C++ 확장 문법 property

반응형

C#에는 property라는 개념이 존재합니다.

일반적으로 클래스에 변수가 추가될 때 protected나 private로 숨깁니다.

그리고 getter, setter를 통해서 값을 변경하고 가져오는 방법을 사용합니다.

C#에서는 간편하게 자동 구현 프로퍼티를 통해서 변수 자체에서 get, set 기능을 추가할 수 있습니다.

Visual Studio의 C++은 확장을 통해서 property 기능을 제공합니다.

표준 C++ 구현이 아니기 때문에 다른 컴파일러에서는 컴파일되지 않습니다.

사용 방법은 다음과 같습니다.

#include <iostream>

class Percentage
{
public:
	void putPercent(int nVal)
	{
		nValue = nVal;
	}

	int getPercent()
	{
		return nValue;
	}

	__declspec(property(get = getPercent, put = putPercent)) int nPercent;

private:
	int nValue;
};

int main()
{
	Percentage percent;
	percent.nPercent = 85;
	std::cout << percent.nPercent << " %" << std::endl;
}

먼저 값을 저장할 변수를 생성하고 getter(getPercent), setter(putPercent)를 생성합니다.

그리고 중요한 부분이 __declspec 부분입니다.

__declspec(property) 구문을 통해서 생성된 변수에 getPercent, putPercent를 연결합니다.

주의할 점은 nPercent는 외부에 노출되는 변수로 getPercent나 putPercent에 사용하면 안됩니다.

만약 함수 내부에서 nPercent를 사용할 경우 재귀 호출로 판단됩니다.

property의 장점은 간편하게 값을 대입하고 사용할 수 있다는 점입니다.

또한 함수가 연결되기 때문에 예외처리 등의 코드를 추가할 수 있습니다.

Visual Studio에서만 사용이 가능한 점이 단점이지만 편리한 코딩이 가능하게 해줍니다.

반응형