Delphi [델파이 문법] 클래스와 객체 #1

2012.04.12 19:30

관리자 조회 수:10866

클래스 또는 클래스 타입은 필드, 메소드, 그리고 속성으로 구성된 구조를 정의합니다. 클래 스 타입의 인스턴스를 객체라고 합니다. 클래스의 필드, 메소드, 속성을 클래스의 구성요소 또는 멤버라고 합니다.


  • 필드(field)는 본질적으로 객체의 일부인 변수입니다. 레코드의 필드와 마찬가지로 클래스 필드 는 클래스의 각 인스턴스에 있는 데이터 항목을 나타냅니다.
  • 메소드(method)는 클래스와 연결된 프로시저나 함수입니다. 대부분의 메소드는 클래스의 인스 턴스인 객체에 대해 동작합니다. 일부 메소드(클래스 메소드)는 클래스 타입 자체에 대해 작동 합니다.
  • 속성(property)은 객체와 연결된 데이터(보통 필드에 저장)에 대한 인터페이스입니다. 속성에는 데이터를 읽고 수정하는 방법을 결정하는 액세스 지정자가 있습니다. 객체 외부에 있는 프로그 램의 다른 부분에서 속성은 여러 관점에서 필드처럼 나타납니다.


객체는 해당 클래스 타입에 의해 구조가 결정되는 동적으로 할당된 메모리 블럭입니다. 각 객체에는 클래스에서 정의된 모든 필드의 고유한 복사본이 있지만 클래스의 모든 인스턴스는 같은 메소드를 공유합니다. 객체는 생성자(constructor)와 소멸자(destructor)라는 특수 메소드에 의해 생성 및 소멸됩니다.


클래스 타입의 변수는 실제로는 객체를 참조하는 포인터입니다. 따라서 둘 이상의 변수들이 같은 객체를 참조할 수 있습니다. 다른 포인터와 마찬가지로 클래스 타입 변수는 nil 값을 가 질 수 있습니다. 하지만 가리키는 객체에 액세스하기 위해 클래스 타입 변수를 명시적으로 역참조할 필요는 없습니다. 예를 들어, SomeObject.Size := 100은 SomeObject가 참조하 는 객체의 Size 속성에 100이라는 값을 지정합니다. 그러나 이것을 SomeObject^.Size := 100 처럼 쓰지는 않습니다. 


클래스 타입

클래스 타입은 인스턴스화하기 전에 선언하고 이름을 지정해야 합니다. (변수 선언 내에서 클래스 타입을 정의할 수 없습니다.) 프로그램이나 유닛의 가장 외부 유효 범위(scope)에서 만 클래스를 선언할 수 있으며, 프로시저나 함수 선언에서는 안됩니다.

클래스 타입 선언은 다음과 같은 형태를 가집니다. 

object_1_1.png

여기서 className은 유효한 식별자이고, sealed나 abstract는 옵션이며, (ancestorClass) 도 옵션이며, memberList는 클래스의 멤버들(필드, 메소드, 속성)을 선언합니다. (ancestorClass)를 생략하면 새 클래스는 이미 정의된 TObject 클래스에서 직접 상속됩니 다. (ancestorClass)가 있고 memberList가 비어 있는 경우 end를 생략할 수 있습니다. 클 래스 타입 선언에 클래스에 의해 구현하는 인터페이스들을 포함할 수도 있습니다. 11장의 “인터페이스의 구현”을 참조하십시오.


클래스가 sealed로 표시되면 상속을 통해 확장할 수 없습니다. 클래스가 abstract로 표시되 면 Create 생성자로 직접 인스턴스화할 수 없습니다. abstract virtual 메소드를 전혀 포함 하고 있지 않은 경우라도 전체 클래스로 abstract로 선언할 수 있습니다. 클래스는 abstract 이면서 동시에 sealed일 수는 없습니다.


클래스 선언에서 메소드는 바디 없이 함수나 프로시저의 헤더로 나타납니다. 각 메소드에 대 한 정의적 선언(defining declaration)은 프로그램 내의 어디에나 위치시킬 수 있습니다. 


예를 들어, Classes 유닛에 있는 TMemoryStream 클래스 선언은 다음과 같습니다.

object_1_2.png 


TMemoryStream은 Classes 유닛에 있는 TCustomMemoryStream의 자손으로, 대부분의 멤버를 상속합니다. 하지만 소멸자 메소드인 Destroy를 비롯한 몇몇 메소드와 속성들을 재 정의하거나 새로 정의합니다. 생성자인 Create는 변경되지 않고 TObject에서 상속하고 재 선언되지 않습니다. 각 멤버는 private, protected 또는 public으로 선언되어 있습니다. (이 클래스에는 published 멤버는 없습니다.) 이들 용어에 대한 설명은 아래에서 할 것입니다. 위와 같이 선언했다면, 다음과 같이

TMemoryStream의 인스턴스를 만들 수 있습니다.


object_1_3.png

   





참조링크

http://tech.devgear.co.kr/devgearbook

델파이 프로그래밍 언어 - 엠바카데로 저 | 박지훈 역 (2009년)

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15417
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13960
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16496
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22048
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23267
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18921
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39245
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174696
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 524
658 [RAD서버] [웨비나-딥다이브] 매장 관리 솔루션 개발하기(개발 시나리오와 데모) file 험프리 2016.11.02 1318
657 델파이/C++빌더 개발자를 위한 최고의 미들웨어 서버 - RAD 서버 file 험프리 2016.11.02 1782
656 [고객 사례- 제조, 임베디드DB] Electrolux 의 세탁정보관리시스템 (CMIS) file 관리자 2016.11.02 797
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 942
651 이 달의 기술자료 - 2016년 11월 험프리 2016.10.28 441
650 [베를린 U2] 윈도우 10 달력 컨트롤이 새롭게 추가될 예정입니다. 험프리 2016.10.28 866
649 Connascence: 커필링을 측정하는 방법(닉 하지스) 험프리 2016.10.17 596
648 COM 오브젝트 연동 유닛 생성하기: Import a Type Library file 험프리 2016.09.30 2495
647 이 달의 기술자료 - 2016년 10월 file 험프리 2016.09.30 390
646 [발표자료] 20160929 나만의 앱 완성하기 with 델파이 험프리 2016.09.21 881
645 안드로이드 SDK 설정 방법 file 험프리 2016.09.20 2867
644 [베를린 U1] TGrid가 네이티브 렌더링을 지원해 더 부드럽고 강력한 기능을 제공합니다. file 험프리 2016.09.20 555