본문 바로가기

C/Objective C/Objective C

Objective C enum 예제 따라하기

열거 데이터 형

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;

} 

- 실행화면