클래스

클래스 (Classes) (refch6)

델파이 방식의 객체 지향 프로그래밍에서는 모든 것이 '클래스'를 중심으로 돌아가요. 이 장에서는 클래스가 무엇이고 객체와 어떻게 다른지, 그리고 클래스를 정의하고 사용하는 방법을 살펴봐요.

출처: Free Pascal Reference — 클래스

본문

델파이 방식의 객체 지향 프로그래밍에서는 모든 것이 '클래스' 개념을 중심으로 돌아가요. 클래스는 메서드가 딸린 객체를 가리키는 포인터, 또는 레코드를 가리키는 포인터로 볼 수 있어요.

객체와 클래스의 차이는 주로 메모리에 있어요. 객체는 일반 레코드처럼 스택에 할당되고, 클래스는 항상 힙(heap)에 할당돼요. 다음 예시를 볼게요.

Var
  A : TSomeObject; // an Object
  B : TSomeClass;  // a Class

핵심 차이는 변수 A는 객체의 크기(TSomeObject)만큼 스택 공간을 차지하고, 변수 B는 항상 스택에 포인터 크기만 차지한다는 거예요. 실제 클래스 데이터는 힙에 있어요.

여기서 두 번째 차이가 따라와요. 클래스는 항상 생성자를 통해 초기화해야 하지만, 객체는 그럴 필요가 없어요. 생성자를 호출하면 클래스 인스턴스 데이터에 필요한 메모리가 힙에 할당돼요.

Remark — 옛 Free Pascal 버전에서는 클래스를 쓰려면 유닛이나 프로그램의 uses 절에 objpas 유닛을 넣어야 했어요. 버전 0.99.12부터는 더 이상 그럴 필요가 없어요. 이 버전부터 -MObjfpc-MDelphi 옵션(또는 그에 해당하는 지시어)을 지정하면 유닛이 자동으로 로드돼요.

{$mode objfpc}
{$mode delphi}

사실 컴파일러는 uses 절에서 objpas 유닛을 만나면 경고를 띄워요.

더 알아보기