속성


속성(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 14417
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13054
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 15565
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 21091
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 22321
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 17972
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 38261
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 173770
50 1PASSWORD: 델파이로 개발된 BEST 패스워드 관리 프로그램 관리자 2020.12.07 849
49 파스칼(PASCAL) 언어 50년과 델파이(DELPHI) 관리자 2021.03.31 848
48 델파이에서 아이콘 폰트 사용하기 험프리 2019.12.12 826
47 [추가된 문법 정리] - 클래스 필드(Class Field):델파이 2007 추가 관리자 2016.06.03 824
46 [무료 툴] 델파이 JSON 데이터 자동 연동 프로그램 file 관리자 2020.07.20 805
45 [고객사례-게임, 델파이] 오목게임 관리자 2018.10.23 789
44 [고객사례-게임, 델파이] Rise of Legions 관리자 2019.11.08 786
43 델파이 RTL: 새로운 제네릭 컬렉션 vs 기존 클래식 컬렉션 험프리 2020.01.06 769
42 [고객 사례- 의료, 델파이] COVID-19 - 검사 결과 실시간 확인 앱 관리자 2020.03.25 767
41 파이어닥(FireDAC)으로 IBLite 연결 시 "unavaliable database." 오류 발생에 대한 대응 file Humphery 2015.05.15 765
40 [DelphiCon 요약] High DPI 고해상도를 VCL에서 활용하기 (Leveraging High DPI in VCL Applications) 관리자 2021.01.13 763
39 1차 공개 중고생 강의용 앱 소스 및 메뉴얼입니다. file 쭈니아빠 2016.07.16 759
38 델파이로 3D 크레딧 스크롤 구현하기(소스제공) file 험프리 2018.05.09 724
37 델파이 코드 정적 분석기 V2.4 출시 및 무료 다운로드 관리자 2021.05.25 722
36 리팩토링 3-메소드 추출 file 김원경 2017.02.24 721
35 [UX Summit 요약] 윈도우10에 멋진 플루언트UI 룩앤필을 델파이로 구현하기 #2 (Giving your Apps the Fluent UI Look and Feel with Delphi #2) 관리자 2021.03.02 720
34 [DelphiCon 요약] 델파이로 함수형 프로그래밍하기 (Functional Programming With Delphi) 관리자 2020.12.29 707
33 [고객사례-유틸리티, 델파이] 녹음기 앱 - Voice Recorder 관리자 2019.12.10 678
32 [델파이 샘플 코드] 안드로이드, iOS, OSX, 윈도우, 리눅스, HTML5 관리자 2019.11.13 670
31 Class에서 Interface 두 개 구현할 때, 이 둘이 동일한 이름의 메소드(Method)를 가지고 있다면? file 험프리 2019.12.11 665