속성


속성(property)은 필드와 마찬가지로 객체의 속성(attribute)을 정의합니다. 그러나 필드가 단순히 내용을 읽거나 변경할 수 있는 메모리 위치인 반면, 속성은 해당 데이터를 읽거나 쓰 는 작업에 특정 동작을 연결합니다. 속성은 객체의 특성에 대한 액세스 과정을 관리할 수 있 는 방법이며, 또한 객체의 속성을 (정적인 값이 아닌) 계산 결과로 지정할 있게 해줍니다. 속성의 선언에서는 이름과 타입을 지정하며, 하나 이상의 액세스 지정자(access specifier) 를 포함합니다. 


속성 선언의 문법은 다음과 같습니다. 


Object_12_1.png


여기서,

  • propertyName은 유효한 식별자입니다.
  • [indexes]는 옵션이며, 세미콜론으로 구분되는 일련의 파라미터 선언들을 나타냅니다. 각 파라미터 선언은 identifier1, ..., identifiern: type과 같은 형태를 가집니다. 자세한 내용은 아래의 “배열 속성”을 참조하십시오.
  • type은 이미 정의되었거나 이전에 선언된 데이터 타입이어야 합니다. 따라서, property Num: 0..9 ...와 같은 속성 선언은 잘못되었습니다.
  • index integerConstant 절은 옵션입니다. 자세한 내용은 아래의“Index 지정자”를 참조하십 시오.
  • specifiers는 read, write, stored, default(또는 nodefault), implements 지정자의 리스트입 니다. 모든 속성 선언에는 적어도 하나의 read 또는 write 지정자가 있습니다. implements에 대한 내용은 11장의“위임(delegation)으로 인터페이스 구현”을 참조하십시오. 

속성은 속성의 액세스 지정자에 의해 정의됩니다. 필드와 달리, 속성은 var 파라미터로 전달 할 수 없으며, 속성에 @ 연산자를 사용할 수도 없습니다. 이는 속성이 반드시 메모리에 있는 것이 아니기 때문입니다. 예를 들면, 데이터베이스에서 값을 가져오거거나 임의(random)의 값을 생성하는 read 메소드를 지정할 수 있습니다.


속성 액세스


모든 속성은 read 지정자를 가지거나, write 지정자를 가지거나, 또는 둘 다 가집니다. 이러 한 지정자를 액세스 지정자(access specifier)라고 하며 다음과 같은 형태를 가집니다. 


Object_12_2.png


여기서 fieldOrMethod는 속성이 선언된 클래스나 조상 클래스에서 선언된 필드 혹은 메소 드의 이름입니다.


  • fieldOrMethod가 같은 클래스에서 선언되는 경우 속성의 선언보다 앞에 선언해야 합니다. 조 상 클래스에서 선언되는 경우에는 fieldOrMethod를 자손 클래스에서 볼 수 있어야 합니다. 즉, 다른 유닛에서 선언된 조상 클래스의 private 필드나 메소드여서는 안됩니다.
  • ieldOrMethod가 필드인 경우 속성과 같은 타입이어야 합니다.
  • fieldOrMethod가 메소드인 경우, dynamic이어서는 안되며, virtual인 경우 오버로드될 수 없습니다. 또한, published 속성의 액세스 메소드는 기본인 register 호출 규칙을 사용해야 합니다. 
  • read 지정자에서 fieldOrMethod가 메소드인 경우, 파라미터가 없고 리턴 타입이 속성의 타입과 동일한 함수이어야 합니다. (인덱스 속성이나 배열 속성의 액세스 메소드는 예외입니다) 
  • write 지정자에서 fieldOrMethod가 메소드인 경우, 속성의 타입과 동일한 타입의 단 하나의 값 파라미터 또는 상수 파라미터만을 가지는 프로시저여야 합니다.

예를 들어, 다음과 같이 선언했다고 가정하면,


Object_12_3.png 


GetColor 메소드는 다음과 같이 선언해야 합니다.


Object_12_4.png 


또, SetColor 메소드는 다음 중 하나로 선언해야 합니다.


Object_12_5.png 


물론 SetColor의 파라미터 이름이 Value일 필요는 없습니다.


속성이 표현식에서 사용되면, read 지정자에서 지정한 필드 혹은 메소드를 사용하여 속성 값을 읽습니다. 속성이 대입문의 왼쪽에서 사용되면, write 지정자에서 지정한 필드 혹은 메 소드를 사용하여 속성 값을 씁니다.


아래 예제에서는 Heading이라는 published 속성을 가진 TCompass라는 클래스를 선언합 니다. Heading의 값은 FHeading 필드를 통해 읽고 SetHeading 프로시저를 통해 씁니다.   

 

Object_12_6.png 


위와 같이 선언했다면, 아래의 문장은,


Object_12_7.png 


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


Object_12_8.png 


TCompass 클래스에서 Heading 속성의 읽기 작업과 관련한 다른 동작이 없습니다. read 작업은 오직 FHeading 필드에 저장된 값을 읽어 오는 것 뿐입니다. 반면, Heading 속성에 값을 대입하면 SetHeading 메소드에 대한 호출로 해석되며, SetHeading 메소드에서는 FHeading 필드에 새 값을 저장하는 작업 뿐만 아니라 다른 동작을 수행할 수 있습니다. 예 를 들어, SetHeading은 다음과 같이 구현될 수 있습니다.


Object_12_9.png 


선언에서 read 지정자만을 가지는 속성은 읽기 전용(read-only) 속성이고, 선언에 write 지 정자만을 가지는 속성은 쓰기 전용(write-only) 속성입니다. 읽기 전용 속성에 값을 대입하 려 하거나 표현식에 쓰기 전용 속성을 사용하면 에러가 발생합니다. 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 14387
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13023
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15532
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21064
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22297
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17933
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38228
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173741
1263 [델파이 문법] 프로시저와 함수 #10 file 관리자 2012.08.23 6938
1262 [XE3] VCL 이나 FireMonkey 폼을 Metropolis UI로 컨버팅하는 1분 동영상 관리자 2012.09.12 6915
1261 [델파이 문법] 프로시저와 함수 #9 file 관리자 2012.08.20 6902
1260 [델파이 문법 시리즈] #6. 제네릭 - 제약조건 file 관리자 2012.03.29 6896
1259 XE5 안드로이드 단말기 연결시 확인사항 file c2design 2013.09.23 6874
1258 파이어몽키용 TMS 그리드의 간략한 소개 백서 관리자 2012.09.26 6864
1257 3줄의 코드로 "움직이는 3D 컬러애벌레" 만들기 관리자 2012.07.12 6861
» [델파이 문법] 클래스와 객체 #12 file 관리자 2012.06.04 6855
1255 [델파이 문법] 문법 요소 #4 file 관리자 2012.10.19 6840
1254 [동영상강의] 델파이 기본 교육_15.델파이와 DB연결과 dbExpress 관리자 2012.07.12 6827
1253 [델파이 문법] 클래스와 객체 #9 file 관리자 2012.05.16 6804
1252 [동영상 강의] 델파이 기본 교육_21.트랜잭션처리 관리자 2012.08.10 6788
1251 [델파이 문법 시리즈] #4. 제네릭 - 타입(기반,클래스,인터페이스,레코드,프로시저) file 관리자 2012.03.27 6747
1250 [델파이 문법 시리즈] #5. 제네릭 - 메소드(파라미터,오버로드,타입 호환성) file 관리자 2012.03.28 6733
1249 [델파이 문법] 데이터 타입, 변수 및 상수 #3 file 관리자 2013.02.13 6729
1248 [델파이 문법] 클래스와 객체 #21 file 관리자 2012.07.13 6723
1247 RichEdit 에서 라인과 칼럼을 알아내기 박병일 2011.12.22 6706
1246 C++Builder XE3 파이어몽키 31 비디오(한글자막) 관리자 2013.03.05 6701
1245 델파이 XE 컨버전 가이드 (첨부파일) file 관리자 2012.06.21 6663
1244 안드로이드 - 장비 부팅 시 앱을 자동시작(링크) Humphery 2014.01.15 6626