클래스
클래스 (Classes) (refch6)
델파이 방식의 객체 지향 프로그래밍에서는 모든 것이 '클래스'를 중심으로 돌아가요. 이 장에서는 클래스가 무엇이고 객체와 어떻게 다른지, 그리고 클래스를 정의하고 사용하는 방법을 살펴봐요.
본문
델파이 방식의 객체 지향 프로그래밍에서는 모든 것이 '클래스' 개념을 중심으로 돌아가요. 클래스는 메서드가 딸린 객체를 가리키는 포인터, 또는 레코드를 가리키는 포인터로 볼 수 있어요.
객체와 클래스의 차이는 주로 메모리에 있어요. 객체는 일반 레코드처럼 스택에 할당되고, 클래스는 항상 힙(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 유닛을 만나면 경고를 띄워요.
더 알아보기
- 6.1 클래스 정의
- 6.2 추상·봉인 클래스
- 6.3 일반·정적 필드
- 6.3.1 일반 필드/변수
- 6.3.2 클래스 필드/변수
- 6.4 클래스 인스턴스화
- 6.5 클래스 소멸
- 6.6 메서드
- 6.6.1 선언
- 6.6.2 호출
- 6.6.3 가상 메서드
- 6.6.4 클래스 메서드
- 6.6.5 클래스 생성자와 소멸자
- 6.6.6 정적 클래스 메서드
- 6.6.7 메시지 메서드
- 6.6.8 inherited 사용하기
- 6.7 프로퍼티
- 6.7.1 정의
- 6.7.2 인덱스 프로퍼티
- 6.7.3 배열 프로퍼티
- 6.7.4 기본 프로퍼티
- 6.7.5 공개(published) 프로퍼티
- 6.7.6 저장 정보
- 6.7.7 프로퍼티 오버라이딩·재선언
- 6.8 클래스 프로퍼티
- 6.9 중첩 타입·상수·변수