본문 바로가기

Programming/Win32&MFC&COM

afx_msg의 의미

반응형

afx_msg는 MFC에서 메소드(이벤트 핸들러)를 오버라이딩 할 때 앞에 자동적으로 적히게 됩니다.

afx_msg는 다음과 같이 정의되어 있습니다.

#define afx_msg

결론적으로 afx_msg는 아무 의미가 없는 정의입니다.

afx_msg는 보통 virtual의 의미를 담고 사용합니다.

virtual에 대한 내용은 아래의 링크를 통해서 확인할 수 있습니다.

2014/12/03 - [Programming/C&C++] - 다형성과 가상함수

부모클래스에서 virtual로 선언한 이후에 자식클래스가 구현할 수 있게 해주는 것입니다.

부모만 virtual 선언하면 자식은 굳이 virtual을 선언하지 않아도 됩니다.

그런데도 afx_msg를 사용하는 이유가 있습니다.

부모클래스의 메소드(함수) 중에는 virtual이 선언이 안되어 있는 메소드도 존재합니다.

그럼 virtual을 붙이면 안되기 때문에 그럴 때 afx_msg를 사용합니다.

MESSAGE_MAP(C++ 소스에 BEGIN_MESSAGE_MAP 부분)에서 오버라이드 된 메소드를 메시지에 연결합니다.

이 두가지를 충족시키기 위해서 afx_msg를 사용합니다.

아무 의미가 없기 때문에 안써도 무방하지만 아무래도 써 있는 게 더 파악하기가 수월합니다.

추가적으로 C++11에서는 override라는 키워드를 통해서 명시적으로 override 됐다는 것을 표현할 수 있습니다.

2014/12/21 - [Programming/C++11&14] - [C++11] final과 override

반응형