속성


속성(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 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
643 [베를린 U1] 윈도우 태스크바 알림의 뱃지를 제어할 수 있습니다. 험프리 2016.09.20 680
642 [업데이트][10.1 베를린] RAD Studio 10.1 베를린 서브스크립션 업데이트 1 [5] file 험프리 2016.09.19 1220
641 윈도우 10 Anniversary 업데이트와 RAD Studio file 관리자 2016.09.09 838
640 RAD 스튜디오(델파이, C++빌더) 웹개발 방법(WebBroker, IntraWeb) 험프리 2016.09.07 1829
639 TeeChart 컴포넌트를 통해 다양한 차트 및 그래프로 데이터를 출력할 수 있습니다. file 험프리 2016.08.30 5241
638 [발표자료] 20160830 나만의 C++애플리케이션 완성하기 with C++빌더 험프리 2016.08.26 1917
637 이 달의 기술자료 - 2016년 09월 file 험프리 2016.08.25 590
636 [마이그레이션 사례] 감리교신학대학교 험프리 2016.08.25 1436
635 인터베이스(Interbase) 에디션 안내 file 험프리 2016.08.25 1381
634 [로드맵] RAD 스튜디오 로드맵(2016년 8월) file 험프리 2016.08.12 1982
633 FireDAC 성능 비교(BDE, dbGO(ADO), dbExpress, FireDAC) 험프리 2016.08.09 1755
632 퀵레포트(Quick Report)에 사진 출력하기 험프리 2016.08.01 1864
631 BLOB 컬럼에 (이미지 등의)데이터 읽고 쓰기 험프리 2016.08.01 6093
630 퀵레포트 보고서 엑셀로 내보내기(저장하기) [1] 험프리 2016.08.01 1662
629 이 달의 기술자료 - 2016년 08월 file 험프리 2016.07.28 464
628 [마이그레이션] 써드파티 컴포넌트 마이그레이션 방안 안내 험프리 2016.07.26 1439
627 1차 공개 중고생 강의용 앱 소스 및 메뉴얼입니다. file 쭈니아빠 2016.07.16 762
626 이 달의 기술자료 - 2016년 07월 file 험프리 2016.06.30 2038
625 [발표자료] 20160624 소개합니다, RAD서버 관리자 2016.06.27 724
624 [추가된 문법 정리] - 배열 상수 초기화:델파이 XE7 추가 관리자 2016.06.03 3324