열거 데이터 형
Objective-C에서는 변수에 할당 가능한 값의 범위를 지정할 수 있다. 열거 데이터형은 키워드 enum을
붙여서 정의한다. 이 키워드 뒤에 바로 열거 데이터 형의 이름이 붙고 그 다음에는 (중괄호 안에) 대입 가
능한 값들을 정의하는 식별자 목록이 나온다.
예를 들어, 다음 명령문으로는 flag라는 데이터 형을 정의한다.
enu flag { false, true};
이론적으로 이 flag형은 true와 false 값만 할당할 수 있다. 안타깝게도 컴파일러는 이 규칙을 위반해도
경고 메시지를 주지 않는다.
enum flag 형 변수를 선언하려면 키워드 enum과 열거형 이름 flag를 쓴 다음 그 뒤에 변수 목록을 적어
준다. 다음 명령문으 endOfData, matchFound를 flag 형 변수가 되도록 정의한다.
enum flag endOfData, matchFound;
이 변수에 대입할 수 있는 값은 (이론적으로) true와 false뿐이다. 따라서 다음과 같은 명령문은 유효하다.
endOfData = true;
if( matchFound == false )
...
혹 열거형 식별자에 특정 정수 값을 연계해서 사용하고 싶을 경우에는, 데이터 형을 정의할 때 해당 식별
자에 정수를 할당할 수 있다. 식별자에 특정 정수 값이 할당되었다면 다음에 나오는 열거형 식별자는 그
값에 1씩 더한 값을 할당받는다.
enum direction ( up, down, left = 10, right);
enum boolean { no = 0, false = 0, yes = 1, true = 1};
enum month { january = 1, february, march, april, may, june, july, august,
september, october, november, december}; Objective-C 컴파일러는 열거 식별자를 정수 상수로 여긴다. 만일 프로그램에 다음 두 줄이 들어 있다면
thisMonth의 값은 February라는 이름이 아니라 2가 된다. enum month thisMonth;
...
thisMonth = february;
- 소스코드
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { enum month { january = 1, february, march, april, may, june, july, august, september, october, november, december }; enum month month; int days; NSLog (@"Enter month number: "); scanf ("%i", &amonth);
switch (amonth) { case january: case march: case may: case july: case august: case october: case december: days = 31; break; case april: case june: case september: case november: days = 30; break; case february: days = 28; break; default: NSLog (@"bad month number"); days = 0; break; } if ( days != 0 ) NSLog (@"Number of days is %i", days); if ( amonth == february ) NSLog (@"...or 29 if it's a leap year");
return 0; } |
- 실행화면
'C/Objective C > Objective C' 카테고리의 다른 글
Objective C protocol(프로토콜) (0) | 2012.07.23 |
---|---|
Objective C category(카테고리) 예제 따라하기 (0) | 2012.07.23 |
Objective C 정적변수 예제 따라하기 (0) | 2012.07.23 |
Objective C 전역 변수 (0) | 2012.07.23 |
Objective C Instance 변수의 범위를 조절하는 지시어 (0) | 2012.07.23 |