저장 정보

저장 정보

컴파일러는 classes 유닛에서 구현한 것 같은 스트리밍 메커니즘으로 프로퍼티가 스트리밍되는지 제어하는 두 가지 지정자를 제공해요.

출처: Storage information

본문

이 지정자들은 생성되는 RTTI에 추가 정보를 기록하는데, 나중에 스트리밍 시스템에서 사용돼요.

  • stored 지정자
  • default 지정자와 그 반대인 nodefault

두 지정자는 모두 프로퍼티를 스트리밍해야 하는지 결정하는 데 평가돼요.

stored 지정자의 인자는 boolean 상수, 클래스의 boolean 필드, 또는 boolean 결과를 반환하는 매개변수 없는 함수여야 해요. stored 지정자의 인자가 False로 평가되면 프로퍼티는 스트리밍되지 않아요.

Remark stored 지정자가 없으면 stored True와 동일해요.

Stored 평가 결과가 True라면 프로퍼티의 default를 고려해요.

default 지정자는 서수형(ordinal) 타입과 집합(set)에 지정할 수 있어요. 이 기본값을 값으로 가진 프로퍼티는 Stored가 True여도 스트리밍 시스템이 스트림에 쓰지 않아요. 기본값은 클래스에 대해 생성된 RTTI에 저장돼요.

String, 부동소수점, 포인터 프로퍼티는 각각 빈 문자열, 0, nil의 암묵적 기본값을 가져요. 서수형과 집합 프로퍼티는 암묵적 기본값이 없어요.

nodefault 지정자는 프로퍼티에 기본값이 없음을 나타내는 데 사용해야 해요. 그 효과는 프로퍼티를 스트리밍할 때 stored가 True라면 이 프로퍼티의 값이 항상 스트림에 쓰인다는 거예요.

주의할 점이 몇 가지 있어요.

  • 클래스가 인스턴스화될 때 기본값이 프로퍼티에 자동으로 적용되지는 않아요. 이것을 클래스 생성자에서 처리하는 것은 프로그래머의 책임이에요.
  • 기본값으로 -2147483648은 사용할 수 없어요. nodefault를 나타내기 위해 내부적으로 사용되기 때문이에요.
  • 배열 프로퍼티에는 default를 지정할 수 없어요.
  • 배열 프로퍼티에는 Stored 지시어를 지정할 수 없어요.
  • 모든 저장 지정자는 하위 클래스에서 오버라이드할 수 있어요.
     property Test stored False;
  • nodefault 지정자는 string, 부동소수점, 포인터 프로퍼티의 암묵적 기본 지정자를 재정의하는 데 사용할 수 있어요.
  • 여기서 설명한 스트리밍 메커니즘은 RTL의 classes 유닛에서 구현한 것이에요. 다른 스트리밍 메커니즘도 구현할 수 있고, 그들은 RTTI 정보를 다른 방식으로 사용할 수 있어요.

더 알아보기

  • published 프로퍼티(Published properties)
  • 프로퍼티 오버라이드와 재선언(Overriding and redeclaring properties)