일반 필드/변수

일반 필드/변수 (Normal fields/variables)

일반 필드를 선언하는 방법은 두 가지예요. 첫 번째는 객체에서 정의하는 것과 유사한 고전적인 방식이에요.

출처: Normal fields/variables

본문

{$mode objfpc}
type
  cl=class
    l : longint;
  end;
var
  cl1,cl2 : cl;
begin
  cl1:=cl.create;
  cl2:=cl.create;
  cl1.l:=2;
  writeln(cl1.l);
  writeln(cl2.l);
end.

결과는 다음과 같아요.

2
0

이 예제는 필드 값이 0으로 초기화된다는 것을 보여줘요. (비순차 타입에서는 0에 해당하는 것, 즉 빈 문자열, 빈 배열 등으로 초기화돼요.)

두 번째 선언 방식은 var 블록을 사용하는 건데, 비교적 최근 버전의 Free Pascal에서만 쓸 수 있어요.

{$mode objfpc}
type
  cl=class
  var
    l : longint;
  end;

이 정의는 앞의 정의와 완전히 동일해요.

Remark: 컴파일러 3.0 버전부터, 정렬을 더 잘하고 인스턴스를 더 작게 만들 수 있다면 컴파일러가 필드를 메모리에서 재배열할 수 있어요. 즉 인스턴스에서 필드가 반드시 선언 순서대로 나타나지는 않아요. 클래스에 대해 생성된 RTTI는 이 변경을 반영할 거예요.

더 알아보기

클래스 필드는 선언 시 0(또는 그에 상응하는 값)으로 초기화된다는 점을 활용하면 안전한 기본값을 얻을 수 있어요.