Page 66

enum 타입을 구성하는 멤버는 내부적으로 정숫값으로 표현된다. PieceTypeKing에 실제로 할

당된 값은 0이다. 하지만 변수의 타입을 앞에서 정의한 PieceType의 범위로 제한한 상태에서 PieceType 변수에 대해 사칙연산을 수행하거나 일반 정숫값처럼 다루는 코드를 작성하면 컴파

일 경고 또는 에러 메시지가 발생한다. 다음 코드는 PieceType 변수 하나를 선언하고, 이를 일 반 정수 타입 변수처럼 다루는 예를 보여주고 있다. 이렇게 작성하면 대부분의 컴파일러에서 경 고 또는 에러 메시지가 발생한다. PieceType myPiece; myPiece = 0;

enum 타입을 정의할 때 각 멤버에 해당하는 정숫값을 직접 지정할 수도 있다. 문법은 다음과

같다. enum PieceType { PieceTypeKing = 1, PieceTypeQueen, PieceTypeRook = 10, PieceTypePawn };

여기서 PieceTypeKing은 정숫값 1을 갖고, PieceTypeQueen은 컴파일러에 의해 2라는 값이 대입되고, PieceTypeRook은 10을 갖고, PieceTypePawn은 컴파일러에 의해 11이라는 값이 자동으로 대입된다. enum 타입의 멤버에 값을 직접 대입하지 않으면 컴파일러가 이전 멤버의 값에서 1을 증가시킨

값으로 알아서 대입한다. 만약 enum 타입의 첫 번째 멤버의 값을 생략하면 컴파일러는 0을 대 입한다.

2 엄격한 열거 타입 앞 절에서 설명한 바와 같이 enum은 원래 타입을 엄격하게 따지지 않는다. 참고로 타입을 엄격 히 따지는 것을 ‘스트롱 타입 strongly typed ’ 또는 ‘타입에 안전하다(타입 세이프하다)’고 표현한다. enum 타입은 항상 정수로 해석하기 때문에 선언한 형태에 관계없이 모든 enum 타입을 서로 비

교할 수 있다. 반면 타입을 엄격하게 적용하고 싶다면 enum class를 사용한다. 예를 들어 앞에서 enum으로 선언한 PieceType을 다음과 같이 타입 세이프 버전으로 정의할 수 있다.

66

1부 전문가를 향한 C++ 첫걸음

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement