속성


속성(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 22591
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 21024
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 23082
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28881
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 30050
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 25397
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 46348
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 182316
1397 N 윈도우와 맥 개발 시작을 위한 파이어몽키 코스북: 무료 다운로드 제공(385페이지) 관리자 2013.04.05 152367
1396 ComPort(시리얼 통신) 컴포넌트 설치안내 [11] file 험프리 2013.12.04 112780
1395 [REST API] REST 기반 파일 업로드와 다운로드 구현하기 험프리 2020.08.31 84737
1394 델파이 튜토리얼 자습서 이용 안내 관리자 2014.09.01 71988
1393 이 달의 기술자료 - 2014년 11월 험프리 2014.10.13 54176
1392 이 달의 기술자료 - 2014년 6월 file 험프리 2014.06.05 50405
1391 Find the O/S Language Type c2design 2014.07.30 48421
1390 RAD Studio Resource Center 박병일 2012.01.26 46645
1389 CD-ROM 열고 닫기 박병일 2011.12.22 44787
1388 [Android] 폰번호 가져오기 [1] 타락천사 2014.09.05 38644
1387 이 달의 기술자료 - 2014년 12월 file 험프리 2014.11.26 32514
1386 RAD Studio XE6 Update1 발표 [1] Humphery 2014.06.20 29499
1385 델파이XE2 파이어몽키 기반 아이폰앱 개발에서 제스춰를 인식시키는 방법 박병일 2012.01.25 23342
1384 [10.4 시드니 신기능] 새로운 VCL TEdgeBrowser 컴포넌트 험프리 2020.05.18 23197