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

델파이 강좌/문서
Delphi Programming Tutorial&Documents
[92] 중첩 타입(nested type) 선언
df [skydream] 5755 읽음    2006-03-24 18:10

중첩 타입(Nested Type) 선언

중첩 타입(Nested Type) 선언

전용근


초록

델파이 도움말의 Nested Type Declarations 의 번역본입니다.

타입 선언은 클래스 선언 안에 중첩될 수 있다. 중첩 타입은 일반적으로 닷넷 프레임와크와 객체지향 프로그래밍에서 사용된다. 그것은 개념적으로 서로 관계있는 타입들을 묶고, 이름 충돌을 피할 수 있게 한다. 같은 문법이 Win32 델파이 컴파일러에서도 사용된다.

중첩 타입 선언

중첩된 타입선언은 타입 정의 부분에 있는 타입선언 문법을 따른다.

type
  className = class [abstract | sealed] (ancestorType)
      memberList

      type
         nestedTypeDeclaration 

      memberList
  end;           
  			

중첩 타입 선언은 처음 나오는 식별자 아닌 토큰에서 끝난다. procedure, class, type, 모든 가시성 지정자 등.

중첩 타입과 그것이 포함하는 타입에는 일반 액세스 룰이 적용된다. 중첩 타입은 그것을 포함하는 클래스의 인스턴스 변수(필드, 프로퍼티, 메소드) 를 액세스 할 수 있다. 그러려면 그것(컨테이너 클래스를 말함)은 반드시 객체 레퍼런스가 있어야 한다. 중첩 타입은 클래스 필드, 클래스 속성, 클래스 스태틱 메소드에 객체 레퍼런스 없이 액세스 할 수 없으나 일반 가시성 룰은 적용된다.

중첩 타입은 포함하는 클래스의 크기를 증가시키지 않는다. 포함하는 클래스의 인스턴스 생성은 또한 중첩 타입의 인스턴스를 생성하지 않는다. 중첩 타입은 그것을 포함하는 클래스의 선언 내용에서만 관련있다.

중첩 클래스 선언과 액세스

다음 예제는 중첩 클래스의 필드와 메소드를 어떻게 선언하고 액세스 하는지를 보여준다.

 type
      TOuterClass = class
       strict private
          myField: Integer;
 
       public
          type
             TInnerClass = class
              public
                myInnerField: Integer;
                procedure innerProc;
             end;

         procedure outerProc;
       end;
       			

내부 클래스 메소드 innerProc 을 구현하기 위해서는 외부 클래스의 이름과 함께 명시하여야 한다. 예를 들면

procedure TOuterClass.TInnerClass.innerProc;
begin
   ...
end;
   			

중첩 타입에 액세스 하기 위해 점 기호를 사용한다. 예제

 var
   x: TOuterClass;
   y: TOuterClass.TInnerClass;

begin
   x := TOuterClass.Create;
   x.outerProc;
   ...
   y := TOuterClass.TInnerClass.Create;
   y.innerProc;
   			

중첩 상수

상수 역시 중첩 타입 섹션에서와 같은 방식으로 클래스 안에 선언될 수 있다. 상수 섹션도 중첩 타입 섹션에서의 토큰들로 종료된다. 예약어, 지정자, 가시성 지정자 등. 타입 상수는 지원되지 않기 때문에 Borland.Delphi.System.Currency 나 Borland.Delphi.System.TDateTime 과 같은 값 타입 상수는 선언할 수 없다.

중첩 상수는 어떤 일반 타입(simple type)도 될 수 있다: 순서, 순서 범위, 열거형, 문자열, 실수 타입 등등.

다음 코드는 중첩 상수 선언에 대해 설명해준다.

 type
   TMyClass = class
        const
             x = 12;
             y = TMyClass.x + 23;
        procedure Hello;
        private
             const
                 s = 'A string constant';
    end;
 
begin
   writeln(TMyClass.y);   // Writes the value of y, 35.
end.		
   			

df [skydream]   2006-03-24 18:08 X
xml 연습하면서 함 번역해봤습니다.

+ -

관련 글 리스트
92 중첩 타입(nested type) 선언 df 5755 2006/03/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.