Q&A

  • uses 의 차이 ?
nit udc_class_f;

interface

1) uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Mask, DB, DBTables, udc_date;
...


implementation

2) uses syslib;

{$R *.dfm}

위의 1), 2)번의 uses 에 쓰이는 유닛의 차이가 무엇인가요?
부탁드립니다
3  COMMENTS
  • Profile
    한원희 2003.01.23 02:48
    안녕하세요. 한원희입니다.

    별다른 차이는 없습니다.
    interface 절에 쓰면, interface 절에서 포함시킨 유닛의 클래스 및 상수 또는 새로운 형들을 사용할 수 있게 됩니다. 예를 들면, 새로 정의할 클래스나 함수에서 사용하는 클래스나 데이터형이 AUnit 이라는 유닛에 들어 있다면, interface 절의 uses 절에 AUnit 를 포함해야만 하죠. 우리가 폼을 새로 만들면, 새로 만든 폼은 TForm에서 상속을 받게 되는데, TForm이 Forms  이라는 유닛에 있기 때문에, Interface의 uses에 Forms 유닛을 포함시키게 되는것과 마찬가지죠.
    이 때, 주의하실 점이라면, 서로 다른 두 유닛들이 서로를 uses 절에 포함시키려 할 때입니다. 이 때, 한쪽에서 interface절에 uses 했다면, 다른 유닛에서는 implementation에 uses를 시켜야 에러가 나지 않습니다.
    2) 번의 syslib라는 유닛이 interface절에서는 굳이 필요가 없기 때문에, implementation 절에서 uses를 한 것이겠죠. ^^;

  • Profile
    김기문 2003.01.23 20:28
    먼저 답변 감사드립니다. 그리고 또 질문이 있습니다.

    질문1)
    unit unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,  Forms,   Dialogs, ComCtrls, StdCtrls, Mask, DB, DBTables,
    1-1) udc_date;

    type
      TForm1 = class(TForm)
        MaskEdit1: TMaskEdit;
        procedure MaskEdit1Exit(Sender: TObject);
      private
        { Private declarations }
    2-1)    c_datecheck : c_date;
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    uses  
    1-2)  udc_date;

    {$R *.dfm}
    ....

    1-1)은 사용자가 class 를 정의한 유닛입니다.
    2-1)은 1-1)에서 선언한 class 입니다. 그런데
    interfaca uses 에서 1-1)을 추가해서 컴파일 하면에러가 안나는데
    1-1)을 지우고 implementation 의 uses 절인 1-2)에서 추가하면 에러가 나던군요 왜 그런거지요?

    질문2)
    unit unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,  Forms,   Dialogs, ComCtrls, StdCtrls, Mask, DB, DBTables,
    1-1) udc_date;

    type
      TForm1 = class(TForm)
        MaskEdit1: TMaskEdit;
        procedure MaskEdit1Exit(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    uses  
    1-2)  udc_date;

    {$R *.dfm}

    procedure TForm1.MaskEdit1Exit(Sender: TObject);
    var
    2-1)  c _datecheck : c_date;
    begin
       c_datecheck.c_check_date(sender,1,1);
    end;

    2-1)의 클래스를 선언하고 1-1)과 1-2)에서 선언할 경우는 에러가 나지 않더군요 왜그런건지 궁금합니다.

    질문1)과 질문2)의 차이가 어떻게 되는 거지 궁금합니다. 다시한번 부탁드립니다


  • Profile
    한원희 2003.01.23 21:19
    안녕하세요. 한원희입니다.

    질문 1은 1-2에서 사용하는 클래스 때문에 그 줄에서 정의되지 않은 c_date라는 형을 사용해서 에러가 발생하겠네요. c_date형을 interface에서 사용하므로, interface에 넣어야 오류가 발생하지 않습니다.

    질문 2는 c_date라는 형을 implementation 절의 메소드에서만 사용하므로, 두 군데중  한군데만 포함시키면 되는 것입니다.

    즉, interface절에서 어떤 유닛을 uses시키면, 해당 소스의 어느 부분(implementation 절 포함)에서나 포함한 유닛 내의 형이나, 메소드(물론, interface절에서 정의한 것들이죠..) 들을 사용할 수 있고요, implementation 절에서 uses 시키면, implementation 절에서만 사용할 수 있습니다.

    도움이 되셨기를~

    • 임우식
      2003.01.23 08:51
      제가 보기에 로그인절차를 구하는 질문 같은데... 버튼 클릭시 우선 DB와 연결하여야 합니다. DB연결되...
    • 우주천왕
      2003.01.23 09:33
      네 로그인 절차라고 생각을 하시면 됩니다. 근데  Regibutton, AuthButton, UpdateButton, Dele...
    • Sean
    • 2003.01.23 03:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이준억
      2003.01.23 06:14
      소스를 봐야 자세히 알겠는데욤 아마 콜론 ' 을 안써주신거 아니에요.... sql을 보여주시면 자세히 ...
    • 자바롱
    • 2003.01.23 02:30
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오지몽
    • 2003.01.23 01:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2003.01.23 03:20
      델파이6에서는 MaskUtils으로도 분리를 했는지 몰라도 MaskUtils에 가있던데요. hsr////////////////////...
    • 조걸
    • 2003.01.23 01:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강민주
      2003.01.23 02:36
      질문란에 WM_DROPFILES으로 검색해 보시구요.. 팁란에도 있으니깐.. 검색해 보세요. ^^;;
    • 김기문
    • 2003.01.23 01:33
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2003.01.23 02:48
      안녕하세요. 한원희입니다. 별다른 차이는 없습니다. interface 절에 쓰면, interface 절에서 포함시킨...
    • 김기문
      2003.01.23 20:28
      먼저 답변 감사드립니다. 그리고 또 질문이 있습니다. 질문1) unit unit1; interface uses &nbs...
    • 한원희
      2003.01.23 21:19
      안녕하세요. 한원희입니다. 질문 1은 1-2에서 사용하는 클래스 때문에 그 줄에서 정의되지 않은 c_date...
    • 고경태
    • 2003.01.23 01:24
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최재영
    • 2003.01.23 00:48
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.01.23 01:00
      안녕하세요 하얀까마귀 입니다. 밑에 답변 적어놨는데.... 못보셧나요? 그리고 제가 답변 한게 안올...
    • 김진효
      2003.01.23 05:14
      에디트박스에 입력한 텍스트를 Ord 를 이용하여 txt파일에 숫자형태로 저장했습니다.. 'water'로 입력했으...
    • 하얀까마귀
      2003.01.22 23:45
      안녕하세요 하얀까마귀 입니다. 해당 이벤트를 실행시켜 주는겁니다. 이벤트를 실행시켜 주는겁니다....
    • * 아자!! *
      2003.01.22 23:47
    • 하얀까마귀
      2003.01.22 23:52
      111
    • 전병호
      2003.01.23 00:22
      ==> TIdUDPServer를 사용하시는거 맞죠? 직접 구현하실 필요는 없습니다. 이미 컴포넌트로 만들어져있...
    • 이정용
      2003.01.23 00:29
      병호님 답변이 아니었더라면 쓰레드 만드느라 고생하고 있었을것입니다. 정말 깊이 감사드립니다. 그럼 메...
    • 구종만
    • 2003.01.22 23:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 전병호
      2003.01.23 00:28
      ==> 정확한건 아니지만, 의심나는게 있어서 적어봅니다.. 덧2에서 inherited 한 후에 Free해보시죠.. ...
    • 구종만
      2003.01.23 04:42
      우와!! 성공했습니다. 정말 감사드립니다~ ^^ ------------------ edit> 헉!! 다시 안됩니다. ...
    • 김유영
    • 2003.01.22 22:53
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 깨구락지
      2003.01.22 23:01
      rmdir <디렉토리이름> /S/Q
    • 김유영
      2003.01.22 23:09
      rmdir <디렉토리이름> /S/Q /S/Q 는 어떤 명령어 인가요 ? C:TEMP 안에 있는 디렉토리및파...
    • 한원희
      2003.01.23 02:52
      안녕하세요. 한원희입니다. rmdir에 그런 옵션이 있었군요. ^^; 해당 옵션에 대한 설명입니다. &nbs...
    • 구창민
      2003.01.22 22:32
      음..SecuIBAS 란 클래쓰가 먼지 아시나여? 그 클래쓰가 선언된 유닛을 아셔야 할 거 같군여. 음..혹...
    • 우주천왕
      2003.01.22 23:46
      안녕하세요 SecuIBAS에 대한 클래스는 SECUACTIVEXLib_TLB에서 가져다 사용하는 건데요. Component instal...
    • 구창민
      2003.01.23 00:11
      일단, Library Path 에도 추가하셨는지 확인해보시구, 보니깐 ocx 내지는 ActiveX 같군여. 예제가 있...
    • 우주천왕
      2003.01.23 03:54
      그냥 새로 만들었습니다. 새로 만드니깐 되는 군요~~ 감사합니다
    • 구창민
      2003.01.22 22:46
      안녕하세여~ 구창민입니다. 훅은안하셔도 됩니다. ^_^; 간단히 만들어 봤는데 사용해 보세여.. 아...
    • * 아자!! *
      2003.01.23 01:07
    • 김유영
      2003.01.22 23:00
      올려주신 파일 정말감사합니다 사용하기에 이런점도 추가 해주실수 없으실련지여 - 키보드,마우스 몇초...
    • 이추형
      2003.01.22 22:43
      간단하게 프로그래밍 하세요 hook을 이용한 제어가 가능합니다.. 여기 자료실 찾아봐도  ...
    • 고병태
    • 2003.01.22 21:37
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2003.01.22 22:44
      간단한 NEW Application에서도 똑같은 증상이 나타난다면 델파이를 다시 설치하시는것이 좋을듯합니다. ...
    • 방장환
    • 2003.01.22 20:59
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.01.22 23:41
      안녕하세요 하얀까마귀 입니다. compositeReport 는 출력을 하실때..   qryReport1 을 출...
    • 프리맨
      2003.01.23 01:34
      myclassref = class of myclass 는 클래스 레퍼런스 타입이고 myclassref = class (myclass) 는 인스턴...
    • 김기문
      2003.01.23 21:18
      여기서요 상속의 의미는 알겠는데 '클래스 참조' 가 잘 이해가안되는군요 예를 들어주시면 감사하겠습니...
    • 프리맨
      2003.01.23 22:16
      클레스 레퍼런스 타입은 클레스를 담을수 있는 변수를 선언하기 위해 사용합니다. 그 변수는 클래스를 ...
    • 우주천왕
      2003.01.22 21:10
      음 찾았네요~~~ componet import를 시켜야 하는데 안 시켰군요~