Q&A

  • private, protected, public
델파이 소스를 들여다보다가 궁금한점이 있어서 질문합니다..

일반적으로 변수를 설정할때 private, protected, public 의 용도를 아주 조금 알고 쓰기는 하지만.. 여지껏 이렇다하게 큰 프로그램을 만들어본 적이 없는 저로서는 protected의 접근방법이 궁금합니다.

private 영역에 선언된 멤버들과 같이 접근권한이 제한되어 있지만 클래스가 선언된 유닛의 외부에서 이 지시어로 선언된 구성요소들은 그 클래스의 자손 클래스 영역 안에서는 사용이 가능하도록 되어 있다.. 정도로 알고 있거든요.



그런데 db 소스를 보다가 시험삼아 TDataSet의 protected 에 선언되어 있는 GetRecNo라는 함수를 한번 써 봤더니..

undeclared identifier라는 에러가 생깁니다.

물론.. 상단에는 db를 참조시켰구요..

Edit1.Text := IntToStr(DM.Query1.GetRecNo); 라구요..

물론 protected에 선언되어 있기때문에 이렇게 간단히 접근되리라고 생각하지 않습니다.



protected 에 선언되어 있는 메소드에는 어떻게 접근해야 할까요?

그리고..

소스의 왼쪽에 보면 노란도형, 연두색 도형이 있는데 이건 무슨 차이를 말하는 걸까요???



아.. 아는건 없고 모르는것 투성이라서.. 맨날 헤매고 있는 지영이..

아시는분.. 해답 좀 주셔요..

토요일이군요.. 좋은 주말되시구요.

1  COMMENTS
  • Profile
    전철호 1999.04.25 01:10
    강지영 wrote:

    > 델파이 소스를 들여다보다가 궁금한점이 있어서 질문합니다..

    > 일반적으로 변수를 설정할때 private, protected, public 의 용도를 아주 조금 알고 쓰기는 하지만.. 여지껏 이렇다하게 큰 프로그램을 만들어본 적이 없는 저로서는 protected의 접근방법이 궁금합니다.

    > private 영역에 선언된 멤버들과 같이 접근권한이 제한되어 있지만 클래스가 선언된 유닛의 외부에서 이 지시어로 선언된 구성요소들은 그 클래스의 자손 클래스 영역 안에서는 사용이 가능하도록 되어 있다.. 정도로 알고 있거든요.

    >

    > 그런데 db 소스를 보다가 시험삼아 TDataSet의 protected 에 선언되어 있는 GetRecNo라는 함수를 한번 써 봤더니..

    > undeclared identifier라는 에러가 생깁니다.

    > 물론.. 상단에는 db를 참조시켰구요..

    > Edit1.Text := IntToStr(DM.Query1.GetRecNo); 라구요..

    > 물론 protected에 선언되어 있기때문에 이렇게 간단히 접근되리라고 생각하지 않습니다.

    >

    > protected 에 선언되어 있는 메소드에는 어떻게 접근해야 할까요?

    > 그리고..

    > 소스의 왼쪽에 보면 노란도형, 연두색 도형이 있는데 이건 무슨 차이를 말하는 걸까요???

    >

    > 아.. 아는건 없고 모르는것 투성이라서.. 맨날 헤매고 있는 지영이..

    > 아시는분.. 해답 좀 주셔요..

    > 토요일이군요.. 좋은 주말되시구요.





    안녕하세요..

    전철호입니다.



    Protected로 선언된 변수와 메소드를 다른 Unit에서 이용하시려면

    해당 클래스를 상속을 받아서 사용 해야 합니다.

    델파이 에서는 private, public, published, protected로 변수나, 함수,

    메소드를 선언할 수 있는데

    private는 해당 유니트에서만 사용이 가능하고

    public, published는 모든 유니트에서 사용 가능하고,

    protected는 해당 유닛과 상속받은 클래스를 가지고 있는 유닛에서만

    사용 가능합니다.



    예를 들어서 TDataSet에 GetRecNo라는 메소드가 protected로

    되어 있다면

    TDataSet에서 상속을 받아서 사용해야 합니다.

    예제)

    DD : TDataSet 이라고 선언이 되어 있다면

    DD.GetRecno를 사용을 하시려면

    다음과 같이 코딩을 하시면 됩니다.



    type

    TAClass = class(TDataSet);

    ....

    ...

    TAClass(DD).GetRecno;



    그리고 도움말에서 연두색,파란색 같은 도형은 해당 클래스에서

    변수,함수,메소드 참조가 가능한지 여부와, 읽고/쓰기 가 가능한

    property인지를 나타내기 위해 사용한 것입니다.

    예를 들어 연두색 사각형은 클래스선언이 public으로 선언되었다는

    것이고

    파란색 화살표는 property가 읽기속성이라는 것이므로

    그값에 할당을 하면 안된 다는 것입니다.

    즉 일기속성은 클래스에서

    property Active : Boolean read GetActive;

    처럼 선언되어서 쓰기를 못합니다.



    더 자세한 내용은 제 홈페이지 팁란에 있으니 참고하시고

    그래도 궁금한 점이 있으시면 다시 물러 보시기 바랍니다.