배열 프로퍼티

배열 프로퍼티

배열 프로퍼티(array property)도 존재해요. 배열처럼 인덱스를 받는 프로퍼티예요. 인덱스는 1차원 또는 다차원일 수 있어요.

출처: Array properties

본문

일반(정적 또는 동적) 배열과 달리, 배열 프로퍼티의 인덱스는 서수형(ordinal type)일 필요가 없고 아무 타입이 될 수 있어요.

배열 프로퍼티의 read 지정자는 프로퍼티 타입과 같은 반환 타입을 가진 메서드 함수의 이름이에요. 함수는 인덱스 타입과 같은 타입의 변수를 단일 인자로 받아야 해요. 배열 프로퍼티에서는 필드를 read 지정자로 지정할 수 없어요.

배열 프로퍼티의 write 지정자는 인자 두 개를 받는 메서드 프로시저의 이름이에요. 첫 인자는 인덱스와 같은 타입, 두 번째 인자는 프로퍼티 타입과 같은 타입의 매개변수예요. 예시로 다음 선언을 볼게요.


Type
 
  TIntList = Class
 
  Private
 
    Function GetInt (I : Longint) : longint;
 
    Function GetAsString (A : String) : String;
 
    Procedure SetInt (I : Longint; Value : Longint;);
 
    Procedure SetAsString (A : String; Value : String);
 
  Public
 
    Property Items [i : Longint] : Longint Read GetInt
 
                                           Write SetInt;
 
    Property StrItems [S : String] : String Read GetAsString
 
                                            Write SetAsstring;
 
  end;
 

 
Var
 
  AIntList : TIntList;

그러면 다음 문장들이 유효해요.


AIntList.Items[26] := 1;
 
AIntList.StrItems['twenty-five'] := 'zero';
 
WriteLn ('Item 26 : ',AIntList.Items[26]);
 
WriteLn ('Item 25 : ',AIntList.StrItems['twenty-five']);

반면 다음 문장들은 오류를 발생시켜요.


AIntList.Items['twenty-five'] := 1;
 
AIntList.StrItems[26] := 'zero';

인덱스 타입이 틀렸기 때문이에요.

배열 프로퍼티는 다차원일 수도 있어요.


Type
 
  TGrid = Class
 
  Private
 
    Function GetCell (I,J : Longint) : String;
 
    Procedure SetCell (I,J : Longint; Value : String);
 
  Public
 
    Property Cellcs [Row,Col : Longint] : String Read GetCell
 
                                            Write SetCell;
 
  end;

차원이 N개라면, getter와 setter의 첫 N개 인자의 타입은 배열 프로퍼티 정의의 N개 인덱스 지정자 타입과 일치해야 해요.

더 알아보기

  • 프로퍼티 정의(Definition)
  • 인덱스 프로퍼티(Indexed properties)
  • 기본 프로퍼티(Default properties)