클래스·정적 필드
클래스·정적 필드 (Class or Static Fields)
객체 안에 클래스 필드 또는 정적 필드를 담을 수 있어요. 이런 필드는 객체 타입 단위로 전역이며, 전역 변수처럼 동작하되 객체의 유효 범위 안에서만 알 수 있어요. 정적 변수와 클래스 변수의 차이는 순전히 동작하는 모드에 있어요. static 키워드는 항상 동작하고, class 키워드는 {$MODE DELPHI} 또는 {$MODE OBJFPC}가 필요합니다.
본문
이런 필드는 객체의 메서드 안에서 참조할 수 있고, 객체 바깥에서는 완전한 이름(정규화된 이름)으로 참조할 수 있어요.
예를 들어 다음 프로그램의 출력을 볼게요.
{$mode objfpc}
type
cl=object
l : longint; static;
class var v : integer;
end;
var
cl1,cl2 : cl;
begin
Writeln('Static');
cl1.l:=2;
writeln(cl2.l);
cl2.l:=3;
writeln(cl1.l);
Writeln(cl.l);
Writeln('Class');
cl1.v:=4;
writeln(cl2.v);
cl2.v:=5;
writeln(cl1.v);
Writeln(cl.v);
end.
출력은 다음과 같아요.
Static
2
3
3
Class
4
5
5
마지막 줄의 코드가 객체 타입 자체(cl)를 참조하지, 객체의 인스턴스(cl1이나 cl2)를 참조하지 않는다는 점에 주목하세요. static·class 필드는 인스턴스가 아니라 타입 단위로 공유되기 때문에, 어떤 인스턴스로 값을 바꿔도 공통 값이 변하는 걸 확인할 수 있어요.