배열 속성


배열 속성은 인덱스를 가지는 속성입니다. 배열 속성은 리스트의 항목들, 컨트롤의 자식 컨 트롤들, 비트맵의 픽셀 등을 나타낼 수 있습니다.

배열 속성의 선언은 인덱스의 이름과 타입을 지정하는 파라미터 리스트가 추가됩니다. 예를 들면, 다음과 같습니다. 

Object_13_1.png


파라미터 선언을 괄호 대신 대괄호로 묶는 것을 제외하면, 인덱스 파라미터 리스트의 형식은 프로시저나 함수의 파라미터 리스트의 형식과 같습니다. 배열에서는 서수(ordinal) 타입 인덱스만을 사용할 수 있는 것과 달리, 배열 속성에서는 모든 타입의 인덱스를 허용합니다. 배열 속성에서 액세스 지정자는 필드가 아닌 메소드여야 합니다. read 지정자의 메소드는 속성의 인덱스 파라미터 리스트와 동일한(파라미터의 수와 타입, 순서 모두 동일) 파라미터 리스트와 해당 속성의 타입과 일치하는 리턴 타입을 가지는 함수여야 합니다. write 지정자 의 메소드는 속성의 인덱스 파라미터 리스트와 동일한(파라미터의 수와 타입, 순서 모두 동 일) 파라미터 리스트에 추가로 해당 속성의 타입과 동일한 타입의 값 파라미터 또는 상수 파 라미터를 포함하는 프로시저여야 합니다.


예를 들어, 위의 배열 속성의 액세스 메소드들을 다음과 같이 선언할 수 있습니다. 

Object_13_2.png


배열 속성을 액세스하려면 속성 식별자에 인덱스를 지정하면 됩니다. 예를 들어, 다음의 문 장들은, 

Object_13_3.png

아래의 문장들과 동일한 의미입니다.

Object_13_4.png 

배열 속성의 정의 뒤에 default 지시어를 추가할 수 있습니다. 이런 경우, 배열 속성은 클래 스의 기본 속성(default property)이 됩니다. 예를 들면, 다음과 같습니다.

Object_13_5.png 

   

클래스가 기본 속성을 가지는 경우, object.property[index]를 object[index]로 줄여서 기본 속성을 액세스할 수 있습니다. 예를 들어, 위와 같은 선언에서 StringArray.Strings[7]은 StringArray[7]로 줄여 쓸 수 있습니다. 클래스는 주어진 시그니처(배열 파라미터 리스트) 에 대해서 기본 속성을 하나만 가질 수 있지만, 기본 속성을 오버로드하는 것은 가능합니다. 컴파일러는 속성을 항상 정적으로 바인드하므로, 자손 클래스에서 기본 속성을 변경하거나 숨기면 예기치 않은 동작이 일어날 수 있습니다.

 

index 지정자


index 지정자를 사용하면 여러 속성에서 같은 액세스 메소드를 공유하면서 다른 값을 나타 낼 수 있습니다. index 지정자는 index 지시어와 -2147483647과 2147483647 사이의 정수 상수로 구성됩니다. 속성이 index 지정자를 가지는 경우, 해당 read 및 write 지정자는 필드 가 아닌 메소드를 지정해야 합니다. 예를 들면, 다음과 같습니다. 


Object_13_6.png


index 지정자가 있는 속성의 액세스 메소드는 추가로 정수 타입의 값 파라미터를 가져야 합 니다. 이 추가 파라미터는 read 함수에서는 맨 마지막 파라미터여야 하고, write 프로시저에 서는 끝에서 두 번째 파라미터(속성 값을 지정하는 파라미터의 앞)여야 합니다. 프로그램에 서 속성에 액세스하면 속성의 index 지정자에서 지정했던 정수 상수가 액세스 메소드에 자 동으로 전달됩니다.


위와 같이 선언하고 TRectangle 타입의 Rectangle 객체가 있다면, 

Object_13_7.png

위 문장은 아래 문장과 같은 의미가 됩니다. 

Object_13_8.png


저장소 지정자

옵션인 stored, default, nodefault 지시어를 저장소 지정자(storage specifier)라고 합니다. 저장소 지정자는 프로그램 동작에 영향을 주지는 않지만, published 속성의 값들을 폼 파일 에 저장할 것인지 여부를 지정합니다.
stored 지시어 뒤에는 True/False 값이나, 부울 타입의 필드 이름이나, 파라미터가 없고 부 울 값을 리턴하는 메소드 이름이 따라와야 합니다. 예를 들면, 다음과 같습니다. 

Object_13_9.png

속성이 stored 지시어를 갖지 않는 경우 stored True가 지정된 것처럼 처리됩니다.
default 지시어 뒤에는 해당 속성과 같은 타입의 상수가 따라와야 합니다. 예를 들면, 다음과 같습니다.

Object_13_10.png 

상속된 default 값을 오버라이드하면서 값을 새로 지정하지 않으려면 nodefault 지시어를 사용합니다. default 및 nodefault 지시어는 서수 타입과 집합 타입에 대해서만 지원됩니다 (집합 타입은 집합 기반 타입의 범위가 0과 31 사이의 순서 값을 가지는 경우에만 지원). 서 수 타입 및 집합 타입의 속성이 default 또는 nodefault 없이 선언되면 nodefault가 지정된 것으로 간주됩니다. 실수, 포인터, 문자열은 암시적으로 각각 0, nil 및‘ ’(빈 문자열)을 default 값으로 가집니다.


컴포넌트의 상태를 저장할 때 컴포넌트의 published 속성에 대한 저장소 지정자를 확인합니 다. 속성의 현재 값이 해당 default 값과 다르고(또는 default 값이 없는 경우) stored 지정 자가 True이면 속성 값이 저장됩니다. 그렇지 않으면 속성 값이 저장되지 않습니다.


노트: 속성의 값은 자동으로 default 값으로 초기화되지 않습니다. 다시 말해, default 지시 어는 속성 값이 폼 파일에 저장될 때만 영향을 미치며, 새로 생성된 인스턴스의 속성의 초기 값에는 영향을 미치지 않는다는 것입니다.

 

저장소 지정자는 배열 속성에 대해 지원되지 않습니다. default 지시어는 배열 속성 선언에서 사용될 때 다른 의미를 가집니다.“속성”절의“배열 속성”을 참조하십시오.

     

번호 제목 글쓴이 날짜 조회 수
공지 [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
503 [발표자료] RAD Studio XE8 출시 세미나 관리자 2015.05.01 612
502 [업데이트][핫픽스][XE8] iOS 플랫폼의 SQLite 라이브러리 누락 패치 file Humphery 2015.04.30 859
501 [XE8] 번거로운 수작업을 줄여 핵심기능 개발에 집중할 수 있는 개발 생산성 향상도구 Humphery 2015.04.28 897
500 [XE8] TAppAnalytics 컴포넌트로 앱의 사용량 수집, 분석해 사용성을 이해할 수 있습니다. file Humphery 2015.04.27 803
499 델파이에서 MSOffice 엑셀과 워드 연동 참고자료. [1] Humphery 2015.04.27 3761
498 이 달의 기술자료 - 2015년 05월 file 험프리 2015.04.24 5494
497 [델파이7 이후 새로운 기능][XE2~] 프로젝트 매니저에서 타겟플랫폼을 64-bit Windows로 선택 해 64비트 애플리케이션을 개발할 수 있습니다. file Humphery 2015.04.23 4723
496 [델파이7 이후 새로운 기능] 추가되고 개선된 VCL 컴포넌트 Humphery 2015.04.22 3572
495 [델파이7 이후 새로운 기능] 코딩 생산성을 높여주는 코드에디터 기능들 Humphery 2015.04.21 2687
494 XE8로 구현한 멀티플랫폼 클립보드 공유앱 런칭 file c2design 2015.04.19 1185
493 Thalmic Labs의 MYO Armband Delphi SDK Beta7입니다. 쭈니아빠 2015.04.18 1135
492 [XE8] 오프라인에서 도움말을 볼 수 있습니다.(CHM 형식) Humphery 2015.04.17 926
491 [XE8] 대화형 지도 컴포넌트로 구글맵과 애플 맵킷 한번에 사용하기 Humphery 2015.04.17 1650
490 [XE8] 멀티-디바이스 미리보기: 다양한 디바이스 화면을 미리보며 최적화된 화면 개발하기 Humphery 2015.04.17 1132
489 XE8 새로운 기능외의 개선사항 Humphery 2015.04.16 923
488 [XE8] 버전 컨트롤 시스템 IDE 통합(Mercurial 지원) [1] Humphery 2015.04.15 1376
487 [XE8] 근거리 위치기반 서비스를 개발할 수 있는 비콘(Beacon) 연동하기 [1] Humphery 2015.04.15 3939
486 [업데이트][XE7] iOS 8.1.3/8.2 서명과 프로비저닝 프로파일 지원 핫픽스(베타) Humphery 2015.04.14 1055
485 파이어몽키에서 외부 라이브러리 연동하기(jar, so, a) [3] Humphery 2015.04.14 3544
484 [따라하기] reFind 도구를 이용해 BDE 프로젝트를 FireDAC으로 마이그레이션 따라하기 [9] Humphery 2015.04.14 4144