클래스, 클래스 인스턴스, 생성자, 소멸자
위 예시에는 TAnimal과 하위 클래스 TDog가 포함됩니다. 클래스는 단순한 타입으로 템플릿이라고 이해할 수 있습니다. 클래스 자체는 어떤 데이터도 저장하지 않으며 예시의 필드 MyInt: Integer에는 메모리가 할당되지 않습니다.
클래스 변수를 통해 클래스 자체에 데이터를 담을 수 있지만 여기서는 다루지 않고 일반 필드를 가진 기본 클래스만 설명합니다.
필드에 메모리를 할당하려면 클래스 인스턴스를 생성해야 하며, 인스턴스 생성 시 생성자를 호출합니다.
인스턴스를 생성하지 않으면 클래스 코드는 없는 것과 마찬가지로 실행되지 않고 변수에 메모리도 할당되지 않습니다. 클래스를 틀에 비유할 수 있는데 사용할 때만 메모리가 할당되고 사용하지 않을 때는 리소스를 소모하지 않은 채 그대로 유지됩니다.
생성자
- 키워드
constructor로 선언하는 특수 메서드; - 시스템이 먼저 객체 메모리를 할당한 뒤 생성자 코드를 실행;
- 모든 클래스는 암시적으로
TObject를 상속하며 매개변수 없는 기본 생성자Create가 내장되어 별도 작성 없이 사용 가능; - 사용자 정의 생성자는 객체 초기화에 가장 적합하며 필드에 초기값을 할당할 수 있음;
- 사용자 정의 생성자는 관례상
Create로 명명합니다.
예시 코드
program Demo;
{$ifdef FPC} {$mode objfpc}{$H+}{$J-} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
{$codepage utf8}
uses SysUtils;
type
TAnimal = class
private
InternalStuff: TObject;
public
constructor Create;
destructor Destroy; override;
end;
constructor TAnimal.Create;
begin
inherited Create; // 맨 앞에서 부모 클래스 생성자 호출
InternalStuff := TObject.Create;
Writeln('TAnimal.Create 생성자 실행');
end;
destructor TAnimal.Destroy;
begin
Writeln('TAnimal.Destroy 소멸자 실행');
FreeAndNil(InternalStuff); // 내부 하위 객체 해제
inherited Destroy; // 마지막에 부모 클래스 소멸자 호출
end;
var
C: TAnimal;
begin
C := TAnimal.Create;
try
// 객체 사용
finally
FreeAndNil(C); // Destroy 소멸자 자동 호출
end;
end.
실행 결과
D:\fpcdemo>fpc mydemo.dpr
Free Pascal Compiler version 3.2.2 [2021/05/15] for i386
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling mydemo.dpr
Linking mydemo.exe
38 lines compiled, 0.1 sec, 68672 bytes code, 4260 bytes data
D:\fpcdemo>mydemo
TMyClass.Create 생성자 실행
TMyClass.Destroy 소멸자 실행Code language: CSS (css)
InternalStuff는 클래스 내부에서 보관하는 하위 객체입니다. 생성자에서 생성하고 소멸자 내에서 FreeAndNil로 해제해야 메모리 누수를 방지할 수 있습니다.

Previous: 상속 및 가상 메서드
Next: is와 as 요약