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

C++빌더 Q&A
C++Builder Programming Q&A
[56316] Re:Re:Re:빌더에서 이벤트 만드는 법?
둘리.CSIEDA [dooly386] 1740 읽음    2009-02-28 08:51
component event 는 아래에 올리셨네요.. class __property 에 연결된 함수 연결에 대하여 적어 봅니다.

제 블로그에 있는거 옮겨 copy 해 왔어요..
http://opensourceforge.tistory.com/368

이하  paste 된 문장.------------------------------------------------------------------------------

C++ Builder 의 class 에서 __property 에 의한 함수의 호출이 어떻게 이루어 지는지를 간략하게 설명하고자 한다.



우선 C++ Builder 의 c++ 키워드로 __property 가 있다.  키워드 중 __ 가 붙은 즉 _ 가 두개 붙은 경우는 해당 컴파일러 만의 기능인 것을 인식해야 한다. 즉 __property 는 VC++ 에는 없다. 만약에 있다고 하더라도 그 기능은 다를 수 있다.



일단 클래스 A 를 만들어 본다.



class A

{

          int Fdata;

    protected:

          int getData()

          {

                 return Fdata;

          }

          void setData(int v)

          {

                 Fdata = v;

          }

    public:



          __property int data = {read=getData,write=setData};

};



위와 같은 class 에 의하여 객체를 하나 만들어 보자.



A a;



이제 a 라는 객체는 int Fdata 라는 private member 변수를 하나 갖게 되며 getData() 와 setData 라는 member 함수를 갖게 된다.



우리가 클래스 객체에 있어서 내부 데이터의 접근 보호를 위하여 hiding 을 시키는 경우가 있으며 그 데이터 메모리에 접근 하는 방법을 제한적으로 설정하기를 원할 때가 있다. 이러한 경우 우리는 일반적인 c++ 프로그래밍에서 get 과 set 메소드를 만들어 접근하도록 하는 방법을 사용하고 있다.

이는 모든 객체 지향 프로그래밍의 기본으로 사용되고 있는 방식이다.

그러나 이러한 get 과 set 을 이용할 경우 우리는 함수의 형태를 갖는다는 것을 알 수 있으며 실제 접근 자체에서 해당 객체의 멤버함수의 호출 형식으로 이루어 진다.

C++ Builder 의 __property (Delphi 도 마찬가지) 는 바로 이러한 객체 멤버함수에 접근하는 방법을 변수 형식으로 일관된 이름을 통하여 구현하도록 해 주는 것이다.



즉 위의 class 에 의하여 만들어진 객체 a 에 대하여



a.getData() 에 의하여 Fdata 에 대한 read  접근, a.setData() 에 의하여 Fdata 에 대한 write 접근을 하게 된다. 이러한 연결 채널을

__property int data = {read=getData,write=setData};

가 해주는 것이다.



a.data 라는 property 에 우리는 두 가지의 접근이 있을 수 있다는 것을 알 수 있다.

1. write 접근

2. read 접근



write 접근 과 read 접근이 과연 무엇일까???    별거 아니다. 바로 대입 연산자(operator)의 왼쪽에 있는 피 연산자(operand) 인지 오른쪽에 있는 피 연산자 인지를 나타낸다.. 대입 연산자의 왼쪽에 있으면 write 접근이고 오른쪽에 있으면 read 접근이 된다.

이렇게 어떤 메모리에 데이터가 갱신 되어질 경우와 해당 데이터를 읽어 오는 경우로 나뉘며 이를 분석하여 C++ Builder 는 a.data 에 대한 연결된 메소드를 어떤 것을 컴파일 시간에 링크하여 호출해야 할지를 컴파일러가 알아서 할당한 다는 것이다.





      int i = a.data;   와    a.data = 10;    에서 data 접근은 서로 다른 함수가 호출된다는 것이다.

나그네 님이 쓰신 글 :
: 두가지 종합입니다.
: 프로퍼티에 연결된 메서드로 이벤트를 만들어서 프로그램의 흐름 중간에서 이벤트를 발생사켜서 사용해보려고 합니다.
: 그런데 프로퍼티에 연결된 메서드만드는거 부터가 안되네요..
: 둘리.CSIEDA 님이 쓰신 글 :
: : TForm 에 OnMouseDown 과 같은 event 를 말씀하시는건가요??
: : 아니면 __property 에 연결된 class method 를 말씀하시는 건가요?
: :
: : 나그네 님이 쓰신 글 :
: : : C++빌더에 보면 이벤트 핸들러런게 있네요.. 실제로 C++빌더로 짠 프로그램도 이 이벤트에 따라 움직이고요..
: : : 그렇다면 사용자 정의 이벤트를 만들어 사용 할 수도 있을거 같은데.. 이벤트를 만드는 방법은 없나요?

+ -

관련 글 리스트
56303 빌더에서 이벤트 만드는 법? 나그네 1947 2009/02/27
56311     Re:빌더에서 이벤트 만드는 법? 둘리.CSIEDA 1746 2009/02/28
56313         Re:Re:빌더에서 이벤트 만드는 법? 나그네 1647 2009/02/28
56316             Re:Re:Re:빌더에서 이벤트 만드는 법? 둘리.CSIEDA 1740 2009/02/28
56320                 Re:Re:Re:Re:빌더에서 이벤트 만드는 법? 나그네 1566 2009/02/28
56322                     Re:Re:Re:Re:Re:빌더에서 이벤트 만드는 법? 둘리.CSIEDA 1643 2009/03/01
56342                         Re:Re:Re:Re:Re:Re:빌더에서 이벤트 만드는 법? 나그네 1926 2009/03/02
63344                             Re:Re:Re:Re:Re:Re:Re:빌더에서 이벤트 만드는 법? 지금 시작 1474 2010/12/24
63350                                 Re:Re:Re:Re:Re:Re:Re:Re:빌더에서 이벤트 만드는 법? 나그네 1844 2010/12/24
56310         Re:Re:빌더에서 이벤트 만드는 법? 나그네 1491 2009/02/28
56315             Re:Re:Re:빌더에서 이벤트 만드는 법? 김권영 1868 2009/02/28
56319                 Re:Re:Re:Re:빌더에서 이벤트 만드는 법? 나그네 1671 2009/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.