클래스 연산자

클래스 메소드는 클래스 참조에 대해 동작합니다. 모든 클래스는 TObject로부터 ClassType
및 ClassParent라는 두 클래스 메소드를 상속합니다. 이 메소드들은 각각 한 객체의 클래스에
대한 참조와 한 객체의 직접 조상 클래스에 대한 참조를 리턴합니다. 두 메소드는 TClass 타입
의 값을 리턴하는데(여기서 TClass = class of TObject), 이 리턴되는 TClass 타입 값
은 더 특정한 타입으로 타입 캐스트될 수 있습니다. 또한 모든 클래스는 객체가 지정된 클래스
의 자손인지 여부를 확인하는 InheritsFrom이라는 메소드도 상속받습니다. 이러한 메소드는
is 및 as 연산자에 의해 사용되며, 이들 메소드들을 직접 호출하는 경우는 거의 없습니다.


■ is 연산자
is 연산자는 동적 타입 검사를 수행하며, 객체의 실제 런타임 클래스를 확인하는 데 사용됩니
다. 다음 표현식에서,

1.png

이 문법은 object가 class나 그 자손 클래스의 인스턴스인 경우 True를 리턴하고 그렇지 않
으면 False를 리턴합니다. object가 nil이면 결과는 False가 됩니다. object의 선언된 타입이
class와 관련이 없으면, 즉 타입이 다르고 object가 class의 자손 또는 조상이 아니면, 컴파일
에러가 발생합니다. 예를 들면, 다음과 같습니다.

2.png

이 문장은 변수가 참조하는 객체가 TEdit나 그 자손의 인스턴스인지를 먼저 확인한 후, 변수
를 TEdit로 타입 캐스트합니다.


■ as 연산자
as 연산자는 확인된 타입 캐스트(checked typecast)를 실행합니다. 다음 표현식에서,

3.png

이 문법은 object와 동일한 객체에 대한 참조를 리턴하지만, class에서 제공한 타입으로 리턴
합니다. 런타임 시 object는 class나 그 자손 클래스의 인스턴스 혹은 nil이어야 합니다. 그렇
지 않을 경우 예외가 발생합니다. object의 선언된 타입이 class와 관련이 없으면, 즉 타입이
다르고 object가 class의 자손 또는 조상이 아니면, 컴파일 에러가 발생합니다. 예를 들면, 다
음과 같습니다.

4.png

연산자 우선 순위 규칙상 as 타입 캐스트에 괄호를 사용해야 하는 경우가 많습니다. 예를 들
면, 다음과 같습니다.

5.png


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15441
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13961
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16499
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22055
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23268
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18923
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39255
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174713
663 [고객 사례- 의료, 임베디드DB] PAR Springer-Miller Systems – SpaSoft  관리자 2016.11.03 440
662 [고객 사례- 제어장치, 차량] 세진인포텍21의 ABS 제어장치 file 관리자 2016.11.03 814
661 [고객 사례- 서비스(회계, 재정, 세무), 임베디드DB] Bonev Soft Audting 의 AJUR (회계, 재정, 세무 솔루션) file 관리자 2016.11.03 706
660 [고객 사례- 의료, 델파이+임베디드DB] Siemens Healthcare 의 체외진단기기 (IVD, In Vitro Diagnostics) file 관리자 2016.11.03 680
659 [고객 사례- 건설, 임베디드DB] GivenHansco 의 콘크리트 건설 사업 솔루션 (Keystone) file 관리자 2016.11.03 527
658 [RAD서버] [웨비나-딥다이브] 매장 관리 솔루션 개발하기(개발 시나리오와 데모) file 험프리 2016.11.02 1318
657 델파이/C++빌더 개발자를 위한 최고의 미들웨어 서버 - RAD 서버 file 험프리 2016.11.02 1782
656 [고객 사례- 제조, 임베디드DB] Electrolux 의 세탁정보관리시스템 (CMIS) file 관리자 2016.11.02 798
655 [고객 사례- 패션, 의료, 사물인터넷] Spinali Design의 Connected Bikini 관리자 2016.11.02 801
654 [동영상] 애플 터치 아이디 연동하기 file 험프리 2016.11.01 422
653 [동영상] 앱테더링 데이터 암호화/복호화 방법 file 험프리 2016.11.01 803
652 [스타터] C++빌더로 2D 게임을 완성해보세요 (소스코드 제공) file 관리자 2016.10.28 943
651 이 달의 기술자료 - 2016년 11월 험프리 2016.10.28 441
650 [베를린 U2] 윈도우 10 달력 컨트롤이 새롭게 추가될 예정입니다. 험프리 2016.10.28 866
649 Connascence: 커필링을 측정하는 방법(닉 하지스) 험프리 2016.10.17 597
648 COM 오브젝트 연동 유닛 생성하기: Import a Type Library file 험프리 2016.09.30 2501
647 이 달의 기술자료 - 2016년 10월 file 험프리 2016.09.30 390
646 [발표자료] 20160929 나만의 앱 완성하기 with 델파이 험프리 2016.09.21 881
645 안드로이드 SDK 설정 방법 file 험프리 2016.09.20 2869
644 [베를린 U1] TGrid가 네이티브 렌더링을 지원해 더 부드럽고 강력한 기능을 제공합니다. file 험프리 2016.09.20 555