속성


속성(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 17467
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 15868
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 18484
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 24043
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 25430
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 20782
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 41365
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 176698
50 [델파이 문법] 클래스와 객체 #20 file 관리자 2012.07.09 5453
49 [델파이 문법] 클래스와 객체 #19 file 관리자 2012.07.06 6360
48 델파이 튜토리얼 워크샵 발표자료_3D 프로그래밍과 라이브바인딩 file 관리자 2012.07.05 5941
47 델파이 아래 버전에서 XE2로 마이그레이션시 별도의 리소스 파일이 필요 없는 경우 관리자 2012.07.05 5501
46 [델파이 문법] 클래스와 객체 #18 file 관리자 2012.07.02 6530
45 [델파이 문법] 클래스와 객체 #17 file 관리자 2012.06.28 6510
44 [델파이 문법] 클래스와 객체 #16 file 관리자 2012.06.26 6346
43 델파이 XE 컨버전 가이드 (첨부파일) file 관리자 2012.06.21 6672
42 [델파이 문법] 클래스와 객체 #15 file 관리자 2012.06.20 6032
41 [델파이 문법] 클래스와 객체 #14 file 관리자 2012.06.19 6099
40 [델파이 문법] 클래스와 객체 #13 file 관리자 2012.06.11 8043
» [델파이 문법] 클래스와 객체 #12 file 관리자 2012.06.04 6893
38 [델파이 문법] 클래스와 객체 #11 file 관리자 2012.05.31 6964
37 [오픈소소] 델파이용 TProcessInfo 클래스 file 관리자 2012.05.23 10457
36 [델파이 문법] 클래스와 객체 #10 file 관리자 2012.05.22 9867
35 [델파이 문법] 클래스와 객체 #9 file 관리자 2012.05.16 6812
34 [델파이 문법] 클래스와 객체 #8 file 관리자 2012.05.07 12591
33 [델파이 문법] 클래스와 객체 #7 file 관리자 2012.04.30 6533
32 [델파이 문법] 클래스와 객체 #6 file 관리자 2012.04.25 7472
31 [델파이 문법] 클래스와 객체 #5 file 관리자 2012.04.23 6556