보통 비관리 클래스를 정의할 때 캡슐화를
위해서 멤버 변수는 최대한 private 접근으로 한 후 외부에서의 접근을 위해서 get과 set 멤버 함수를 정의합니다.
class
Character
{
public:
…….
void SetCharCd( const int nCharCd ) {
m_nCharCd = nCharCd; }
int GetCharCd() { return m_nCharCd; }
…….
private:
int m_nCharCd;
…….
};
클래스의 멤버를 하나 정의할 때마다 그에
대응하는 get, set 멤버 함수를 정의하는 것은 좀 귀찮은 일이기도 합니다. 그래서 관리코드에서는 이 작업을 쉽게 해주는 property가 생겼습니다.
ref class
Character
{
public:
…….
property int CharCd
{
void set( int nCharCd ) { m_nCharCd = nCharCd; }
int get() { return m_nCharCd; }
}
…….
private:
int m_nCharCd;
…….
};
위 코드에서는 get과 set을 둘 다 정의 했는데 둘 중 하나만 정의 해도 괜찮습니다.
또 위의
set은 아주 간단하게 그냥 대입만 하고 있는데 좀 더 로직을 넣을 수도 있습니다.
ref class
Character
{
public:
…….
property int CharCd
{
void set( int nCharCd )
{
if( nCharCd < 0 ) {
m_nCharCd = 0;
} else {
m_nCharCd = nCharCd;
}
}
int get() { return m_nCharCd; }
}
…….
private:
int m_nCharCd;
…….
};
property 선언과 정의 나누기
일반적으로 클래스의 멤버 선언은 헤더 파일에
정의는 cpp 파일에 하듯이 property도 선언과 정의를
나눌 수 있습니다.
ref class
Character
{
public:
…….
property int CharCd
{
void set( int nCharCd );
int get();
}
…….
private:
int m_nCharCd;
…….
};
void
Character::CharCd::set( int nCharCd )
{
if( nCharCd < 0 ) {
m_nCharCd = 0;
} else {
m_nCharCd
= nCharCd;
}
}
void
Character::CharCd::get()
{
return m_nCharCd;
}
get과 set의 접근
지정자 다르게 하기
위에서
property를 정의할 때 get과 set은
모두 public 였습니다.
이것을 각각 다르게 접근 지정자를 정할 수
있습니다.
ref class
Character
{
public:
…….
property int CharCd
{
protected:
void set( int nCharCd )
{
if( nCharCd < 0 ) {
m_nCharCd = 0;
} else {
m_nCharCd = nCharCd;
}
}
public:
int get() { return m_nCharCd; }
}
…….
private:
int m_nCharCd;
…….
};
참고
http://cppcli.shacknet.nu/cli:property
http://vene.wankuma.com/prog/CppCli_Property.aspx
'C++/CLI' 카테고리의 다른 글
[Step. 10] 이벤트 ( event ) (0) | 2010.08.20 |
---|---|
[Step. 09] 델리게이트 (delegate) (2) | 2010.08.12 |
[Step. 07] 비관리 클래스에서 관리 클래스를 멤버로, 관리 클래스에서 비관리 클래스를 멤버로 (0) | 2010.07.30 |
[Step. 06-2] 관리코드의 문자열과 비관리코드의 문자열 변환 (3) | 2010.07.23 |
[Step. 06-1] 관리코드의 문자열과 비관리코드의 문자열 변환 (0) | 2010.07.16 |