Delphi [델파이 문법] 문법 요소 #14
2012.12.17 19:31
■ for 문으로 컨테이너 반복
델파이 컴파일러는 컨테이너에 대해 for-element-in-collection 스타일의 반복을 지원합니
다. 델파이 컴파일러는 다음과 같은 컨테이너 반복 패턴들을 인식할 수 있습니다.
반복 변수 Element는 컨테이너가가지고 있는 타입과 일치해야 합니다. 루프의 각 반복 때마
다 반복 변수는 컬렉션 멤버의 현재 값을 가집니다. 일반적인 for 루프와 마찬가지로, 반복
변수는 for 문과 같은 블럭에서 선언되어 있어야 합니다.
배열 표현식은 1차원 혹은 다차원, 고정 길이, 동적 배열일 수 있습니다. 배열 요소들에 대한 탐색은
증가 방향으로 진행되므로, 배열의 가장 작은 인덱스 요소부터 시작해서 배열 크기 빼기 1로 끝납니
다. 다음의코드는1차원배열, 다차원배열, 동적배열에 대한 예를보여줍니다.
다음은 문자열 표현식에 대한 반복의 예입니다.
다음은 집합(set) 표현식에 대한 반복의 예입니다.
- TList
다음은 문자열 표현식에 대한 반복의 예입니다.
다음은 집합(set) 표현식에 대한 반복의 예입니다.
클래스나 인터페이스에서 for-in 루프를 사용하려면, 규정된 컬렉션 패턴을 구현해야 합니
다. 컬렉션 패턴을 구현하는 타입은 다음과 같은 특성을 가져야 합니다.
- 해당 클래스 혹은 인터페이스는 퍼블릭 인스턴스 메소드 GetEnumerator()를 포함해야 합니다.
GetEnumerator() 메소드는 클래스, 인터페이스나 레코드 타입을 리턴해야 합니다.
GetEnumerator()에 의해 리턴된 열거자(enumerator) 타입이 IDisposable 인터페이스를
- 해당 클래스 혹은 인터페이스는 퍼블릭 인스턴스 메소드 GetEnumerator()를 포함해야 합니다.
GetEnumerator() 메소드는 클래스, 인터페이스나 레코드 타입을 리턴해야 합니다.
- GetEnumerator()에 의해 리턴된 클래스, 인터페이스나 레코드는 퍼블릭 인스턴스 메소드
MoveNext()를 가져야 합니다. MoveNext() 메소드는 부울 값을 리턴해야 합니다.
- GetEnumerator()에 의해 리턴된 클래스, 인터페이스나 레코드는 퍼블릭 인스턴스 읽기 전용
(read-only) 속성 Current를 가져야 합니다. Current 속성의 타입은 해당 컬렉션이 포함하는
타입이어야 합니다.
GetEnumerator()에 의해 리턴된 열거자(enumerator) 타입이 IDisposable 인터페이스를
구현하는 경우, 컴파일러는 루프가 종료될 때 그 타입의 Dispose 메소드를 호출하게 됩니다.
다음의 코드는 델파이에서 열거형 컨테이너에 대해 반복을 하는 예제입니다.
다음의 클래스들과 그 자손 클래스들은 for-in 문법을 지원합니다.
- TList
- TCollection
- TStrings
- TInterfaceList
- TComponent
- TMenuItem
- TCustomActionList
- TFields
- TListItems
- TTreeNodes
- TToolBar