Delphi [델파이 문법] 클래스와 객체 #16
2012.06.26 02:50
클래스 참조
클래스의 인스턴스인 객체가 아닌 클래스 자체에서 작업이 실행되는 경우가 종종 있습니다.
예를 들어, 클래스 참조를 사용하여 생성자 메소드를 호출할 때 이런 경우가 발생합니다. 클
래스 이름을 사용하면 항상 특정 클래스를 참조할 수 있지만 클래스를 값으로 갖는 변수나
파라미터를 선언해야 하는 경우에는 클래스 참조 타입이 필요합니다.
클래스 참조 타입
클래스 참조 타입(class-reference type)은 종종 메타클래스(metaclass)라고도 불리며, 그
문법은 다음과 같습니다.
![1.png](http://tech.devgear.co.kr/files/attach/images/108/707/006/c04c724b553f5ffe18e132bdfe23229e.png)
여기서 type은 임의의 클래스 타입입니다. type 식별자 자체는 타입이 class of type인 값을
나타냅니다. type1이 type2의 조상인 경우, class of type2를 class of type1에 대입할 수 있
습니다(대입 호환). 따라서,
![2.png](http://tech.devgear.co.kr/files/attach/images/108/707/006/32134f164471c08cb8d0e358bbe60bb6.png)
이 문법은 모든 클래스에 대한 참조를 가질 수 있는 AnyObj라는 변수를 선언합니다. (클래
스 참조 타입의 정의는 변수 선언이나 파라미터 목록에 직접 나타날 수 없습니다.) 모든 클
래스 참조 타입의 변수에 nil 값을 지정할 수 있습니다.
클래스 참조 타입 사용의 사용 방법을 알려면 Classes 유닛에 있는 TCollection 생성자 선언
을 참고하십시오.
![5.png](http://tech.devgear.co.kr/files/attach/images/108/707/006/b9b23c3ffadccc3f47e4c468bf87f499.png)
이 선언에서는 TCollection 인스턴스 객체를 만들려면 TCollectionItem에서 상속받는 클래
스의 이름을 생성자에 전달해야 하도록 강제하고 있습니다.
클래스 참조 타입은 컴파일 시 실제 타입을 모르는 클래스 또는 객체에서 클래스 메소드나
가상 생성자를 호출할 때 유용합니다.
■ 생성자와 클래스 참조
클래스 참조 타입의 변수를 사용하여 생성자를 호출할 수 있습니다. 이 기능으로 컴파일 시
에 타입을 모르는 객체를 생성하는 문법을 사용할 수 있습니다. 예를 들면, 다음과 같습니다.
![3.png](http://tech.devgear.co.kr/files/attach/images/108/707/006/895ec675dd0950b1cdf10d1b9091603f.png)
CreateControl 함수는 생성할 컨트롤 종류를 지정하는 클래스 참조 파라미터를 필요로 합
니다. CreateControl 함수는 이 파라미터를 해당 클래스의 생성자를 호출하기 위해 사용합
니다.
클래스 타입 식별자는 클래스 참조 값을 나타내므로, CreateControl에 대한 호출에서 인스
턴스를 만들 클래스의 식별자를 지정할 수 있습니다. 예를 들면, 다음과 같습니다.
![4.png](http://tech.devgear.co.kr/files/attach/images/108/707/006/a857a63e2372109209c1341ce5e5a57e.png)
클래스 참조를 사용하여 호출되는 생성자는 보통 가상(virtual) 생성자입니다. 호출에 의해
실행되는 생성자의 구현은 클래스 참조의 런타임 타입 정보(RTTI)에 따라 결정됩니다.
실행되는 생성자의 구현은 클래스 참조의 런타임 타입 정보(RTTI)에 따라 결정됩니다.