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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1112] 인터페이스를 통한 콜백 메소드 구현 기법.
김태선 [cppbuilder] 23915 읽음    2012-12-17 00:15
말을 그럴듯하게 붙여서 그렇지 별게 아닙니다.
C++의 경우 함수 포인트나 메소드 포인트가 있기 때문에
인터페이스를 동원하지 않아도 콜백을 쉽게 구현할수 있습니다.
델파이 역시 쉽게 구현되고
C# 역시 delegate로 쉽게 구현됩니다.
그런데 java는 콜백을 위한 지원이 없습니다.
유일하게 할수 있는 방법이 바로 인터페이스를 통한 콜백입니다.
그런데 이게 약간 불편한데 어떨때는 이게 유용하기도 합니다.

아래는 인터페이스를 통한 자바스타일의 콜백 구현 간단 예제입니다.
(물론 자바가 있기 전부터 C++에서는 이게 가능했으므로 꼭 자바스타일이라고 할거까지 없지만)
//---------------------------------------------------------------------------
// 콜백용 인터페이스 선언

interface IAdd
{
    virtual int    add(int x, int y) = 0;
};

// 콜백용 인터페이스를 클래스로 구현

class CAdd : public IAdd
{
    int    add(int x, int y)
    {
        return (x + y) * 2;
    }
};

// 콜백 테스트 함수. 메소드에서 해도 마찬가지입니다.

int    GetAdd(IAdd& addclass, int x, int y)
{
    return addclass.add(x, y);
}

// 테스트

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    CAdd addclass;
    Caption = GetAdd(addclass, 1, 2);
}
//---------------------------------------------------------------------------

약간 코드가 눈에 잘 안들어 온다면 이렇게 해 볼까요.

//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
    class CAdd : public IAdd
    {
        int    add(int x, int y)
        {
            return (x + y) * 3;
        }
    };
    CAdd add;
    Caption = GetAdd(add, 1, 2);
}
//---------------------------------------------------------------------------

아주 쉽죠.


한가지 눈여겨 볼만한 부분은 구현 클래스에
public 이라는 영역 지정자가 없는데도 불구하고
(클래스에서 public 지정이 없으면 기본 private이 적용 되죠)
호출하는데 젼혀 문제가 없죠.

왜 그런지는 한번 생각해 보시기를..

+ -

관련 글 리스트
1112 인터페이스를 통한 콜백 메소드 구현 기법. 김태선 23915 2012/12/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.