■ 순서값이 지정된 열거 타입

기본적으로 열거 값의 순서는 0에서 시작하고, 타입 선언에 식별자가 나열된 순서를 따릅니
다. 선언의 일부 또는 모든 값에 순서 값을 명시적으로 지정하여 순서를 무시하고 재지정할
수 있습니다. 값에 순서를 지정하려면 식별자 뒤에 =constantExpression을 추가합니다.
여기서 constantExpression은 정수값을 리턴하는 상수 표현식입니다(4장의“선언된 상수”
절의“상수 표현식”참조). 예를 들면 다음과 같습니다.

1.png

이 문법은 Size라는 타입을 정의하고, 이 타입의 가능한 값은 Small, Medium, Large입니
다. 여기서 Ord(Small)은 5를 리턴하고, Ord(Medium)은 10을 리턴하고, Ord(Large)는
15를 리턴합니다.

사실, 열거 타입은 선언의 상수들의 최소 및 최대 순서값을 최소 및 최대 값으로 가지는 부
분 범위입니다. 위 예제에서 Size 타입은 11개의 가능한 값을 가지며, 이들 순서는 5에서
15까지입니다. (따라서 array[Size] of Char는 11 문자의 배열을 나타냅니다.) 이들 값 중
단 3개만 이름을 가지고 있지만, 이름이 없는 나머지 값들도 타입 캐스트나 Pred, Succ,
Inc, Dec 같은 루틴들을 통해서 액세스할 수 있습니다. 다음 예제에서, Size의 범위 내의
“익명”값은 변수 X에 지정됩니다.

2.png

순서 값이 명시적으로 지정되지 않은 모든 값은 리스트에서 이전 값의 순서 값보다 1이큰
순서 값을 가집니다. 처음 값에 순서 값이 지정되지 않은 경우, 처음 값의 순서 값은 0입니
다. 즉, 다음과 같은 선언에서,

3.png

SomeEnum은 2개의 값만 가집니다. Ord(e1)은 0을 리턴하고, Ord(e2)는 1을 리턴하고,
Ord(e3) 역시 1을리턴합니다. e2와 e3은 같은 순서를 갖고 있기 때문에 이들은 같은 값을
나타냅니다.

다음의 예처럼, 특정 값이 지정되지 않은 열거 상수는 런타임 타입 정보(RTTI)를 가집니다.

4.png

반면 다음과 같이 특정 값이 지정된 열거 상수는 RTTI를 가지지 않습니다.

5.png


■ 부분범위 타입 (Subrange type)

부분범위 타입은 다른 서수 타입(즉, 기반(base) 타입) 값들의 서브셋을 나타냅니다.
Low..High 형식의 문법에서 Low와 High가 같은 서수 타입의 상수 표현식이고 Low가
High보다 작은 경우, 이런 형식의 모든 문법은 Low와 High 사이의 모든 값을 포함하는 부
분범위 타입입니다. 예를 들어, 다음과 같은 열거 타입을 선언하면,

6.png

다음과 같이 부분범위 타입을 정의할 수 있습니다.

7.png

여기서 TMyColors는 Green, Yellow, Orange, Purple, White 값을 포함합니다.
부분범위 타입을 정의하기 위해 숫자 상수와 문자(길이가 1인 문자열 상수)를 사용할 수도
있습니다.

8.png

숫자 또는 문자 상수를 사용하여 부분범위를 정의할 때 기반 타입은 지정된 범위를 포함하
는 가장 작은 정수나 문자 타입입니다.
Low..High 문법 자체가 타입 이름과 같은 역할을 하기도 합니다. 따라서 이를 직접 변수 선
언문에 사용할 수 있습니다. 예를 들면,

9.png

이 코드는 1부터 500 사이 범위의 값이 될 수 있는 정수 변수를 선언합니다.
부분범위의 각 값의 순서 값은 기반(base) 타입으로부터 유지됩니다. 위의 첫 예제에서
Color가 Green 값을 가지는 변수라면, Ord(Color)는 Color가 TColors 타입이든
TMyColors 타입이든 상관 없이 2를 리턴합니다. 기본 타입이 정수 타입이나 문자 타입이
더라도 값은 부분범위의 시작 또는 끝으로 랩어라운드되지 않습니다. 부분 범위의 경계를
넘어선 값으로 증가시키거나 감소시키면 이 값은 기반 타입으로 변환됩니다. 따라서 다음과
같은 경우,

10.png

이 문법은 에러가 발생합니다. 반면,

11.png

이 문법은 I에 값 100을 대입합니다. (컴파일러의 범위 검사가 활성화되지 않은 경우.)
부분범위의 정의에서 상수 표현식을 사용하게 되면 문법상 혼란의 여지가 있습니다. 이것
은, 모든 타입 선언에서 = 다음의 첫 의미 있는 문자가 왼쪽 괄호인 경우, 컴파일러는 열거
타입이 정의되는 것으로 간주하기 때문입니다. 따라서 다음과 같은 코드에서는,

12.png

에러가 발생합니다. 이 문제를 피해가려면, 타입 선언에서 다음과 같이 시작 괄호를 사용하
지 않으면 됩니다.

13.png

번호 제목 글쓴이 날짜 조회 수
공지 [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 28880
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 30050
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 25397
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 46347
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 182316
203 David I의 31일 동영상(한글자막) - 새로운 장비와 센서를 적용한 파이어몽키 애플리케이션 관리자 2013.03.12 5667
202 David I의 31일 동영상(한글자막) - Action 및 Gesture를 추가한 파이어몽키 애플리케이션 관리자 2013.03.12 3981
201 David I의 31일 동영상(한글자막) - 파이어몽키 Anchors프로퍼티와 Layout 컴포넌트 활용하기 관리자 2013.03.12 4122
200 David I의 31일 동영상(한글자막) - 나만의 첫 C++파이어몽키 애플리케이션 관리자 2013.03.12 5780
199 20130307 "RAD Studio XE3 따라잡기,LIVE! : iOS 델파이 개발 프리뷰 최초 공개" 세미나 자료 file 관리자 2013.03.08 4820
198 "델파이 세미나 in 부산: 윈도우와 맥 개발자를 위한 파이어몽키" 세미나 자료 file 관리자 2013.03.06 4863
197 C++Builder XE3 파이어몽키 31 비디오(한글자막) 관리자 2013.03.05 6729
» [델파이 문법] 데이터 타입, 변수 및 상수 #4 file 관리자 2013.02.19 6438
195 [델파이 문법] 데이터 타입, 변수 및 상수 #3 file 관리자 2013.02.13 6808
194 델파이와 RAD스튜디오로 iOS 개발하기 - 모바일 프리뷰 웹세미나 관리자 2013.02.12 5513
193 [델파이 문법] 데이터 타입, 변수 및 상수 #2 file 관리자 2013.02.04 8380
192 RAD Studio XE3를 활용한 iOS애플리케이션 개발 베타 테스터 모집 관리자 2013.01.28 5011
191 RAD Studio / Delphi / C++Builder XE3 업데이트 2 파일 다운로드 관리자 2013.01.28 5093
190 Turbo Pascal 출시 30년 - '즐거운 소프트웨어 개발'은 계속됩니다. 관리자 2013.01.18 5159
189 [C++빌더 XE3 비디오 31] dbExpress와 ClientDataSet을 사용해 SQL 데이터베이스 C++ 파이어몽키 앱 만들기 관리자 2013.01.09 6276
188 [C++빌더 XE3 비디오 31] 인터베이스 Express로 나만의 SQL 데이터베이스 C++ 파이어몽키 앱 만들기 관리자 2013.01.09 5876
187 [C++빌더 XE3 비디오 31] ClientDataSet을 이용하여 나만의 첫번째 Dataset C++ 파이어몽키 앱 만들기 관리자 2013.01.09 5171
186 [C++빌더 XE3 비디오 31] 기존 C++ VCL과 파이어몽키 앱에서 메트로폴리스 UI 사용하기 관리자 2013.01.08 6106
185 [C++빌더 XE3 비디오 31] C++파이어몽키 애플리케이션에 새로운 장비와 센서 적용하기 관리자 2013.01.08 4904
184 [C++빌더 XE3 비디오 31] C++ 파이어몽키 앱에 Action 및 Gesture 추가하기 관리자 2013.01.08 5532