C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 FAQ
C++Builder Programming FAQ
[15] [VCL] Sender, Parent, this, Owner 에 대한 설명
박지훈.임프 [cbuilder] 17261 읽음    2000-06-13 00:00
/Q//

sender , parent , owner, this 에 대한 차이와 설명좀 부탁합니다.



/A//

사실 말씀하신 네개의 개념은 완전히 별개의 개념입니다만, 같이 놓고 보면 왠지(?) 비슷한데가
많아보여서 괜히(!) 헷갈려보이는 개념들이죠. ^^

Sender는 아래에서도 한번 설명했었죠. 다시 한번 간단히만 말씀드리면, 어떤 컴퍼넌트에 특정
이벤트가 발생했을 때 그 이벤트에 대한 핸들러에 넘겨주는 그 컴퍼넌트 자신의 포인터입니다.
예를 들면, 버튼에 클릭 이벤트가 발생하면(버튼을 클릭하면) 버튼의 OnClick 이벤트 핸들러에
Sender로서 그 버튼의 포인터가 넘겨집니다. 간단히 말해, 어떤 컴퍼넌트에서 이벤트가 발생했는지
를 알려주는 이벤트핸들러의 인자입니다. 모든 이벤트 핸들러는 첫번째 인자로서 그 컴퍼넌트의
포인터를 Sender라는 이름으로 넘겨줍니다. 단, 이때 TObject * 형으로 넘어오므로 이 포인터를
사용해야 할 경우 원래의 컴퍼넌트 형으로 다시 캐스팅을 한 후에 사용해야 합니다.

Parent는 한 컨트롤에게 있어 자신이 놓여진 상위의 윈도우컨트롤을 말합니다. 예를 들어, 패널
위에 버튼을 놓으면 패널이 버튼의 Parent가 됩니다. 이때 버튼의 Parent 프로퍼티에는 Pannel의
포인터가 들어있게 되죠. 이렇게 Parent-Child의 관계에서는, 당연한 이야기지만 Parent의 위치가
변경되면 Child또한 따라서 옮겨집니다. 모든 컨트롤은 반드시 Parent를 가져야 하기 때문에 동적
으로 생성하는 경우 Parent를 수동으로 설정해주지 않으면 컨트롤이 나타나지 않습니다.

Owner는 말 그대로 소유자를 말합니다. 모든 컴퍼넌트, 즉 TComponent에서 상속을 받는 클래스는
생성자의 인자로서 단 하나의 포인터를 갖게 되는데, 이 포인터는 무조건 Owner로서 사용됩니다.
여기서 넘겨진 Owner 포인터는 다른 특별한 의미는 없고, Owner 포인터가 가리키는 객체가 파괴될
때 생성했던 컴퍼넌트를 함께 파괴해주는 역할을 합니다. 예를 들어 다음과 같이 버튼을 동적으로
생성했다면,
TButton *MyButton = new TButton(Form1);
Form1이 MyButton의 Owner가 되며, Form1이 파괴될 때 MyButton도 자동으로 파괴됩니다. 그러므로
이 경우에 만약 MyButton을 수동으로 파괴하려고 하면 결국 두번 파괴하려고 하는 시도가 되므로
유효하지 않은 메모리 영역 참조로 억세스 바이얼레이션 에러를 일으킵니다.

this는 C++ 키워드입니다. 빌더에서만 사용되는 것이 아니죠. this라고 하면 현재의 클래스 객체를
가리킵니다. 예를 들어,
void __fastcall TForm1::Button1Clcik(TObject *Sender)
{
...어쩌구...
this 를 어쩌구...
...저쩌구...
}
이와 같은 TForm1의 멤버함수 Button1Clcik()이 있을 때 this는 Foem1을 가리키게 됩니다.

+ -

관련 글 리스트
15 [VCL] Sender, Parent, this, Owner 에 대한 설명 박지훈.임프 17261 2000/06/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.