가장 빨리 만나는 Go 언어 Unit 12. 열거형 사용하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

열거형 사용하기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

보통 상수는 연속되는 값을 가집니다. 예를 들어 요일을 상수로 표현하면 다음과 같습니다.

const Sunday = 0
const Monday = 1
const Tuesday = 2
const Wednesday = 3
const Thursday = 4
const Friday = 5
const Saturday = 6
const numberOfDays = 7

const 키워드와 ( )를 사용하면 const 키워드를 반복하지 않아도 됩니다.

const (
	Sunday       = 0
	Monday       = 1
	Tuesday      = 2
	Wednesday    = 3
	Thursday     = 4
	Friday       = 5
	Saturday     = 6
	numberOfDays = 7
)

상수에 값을 일일이 대입하지 않고, 순서대로 생성하려면 iota를 사용하면 됩니다. 다음과 같이 첫 번째 상수인 Sunday에 iota를 대입하면 Sunday에 0, Monday에 1, Tuesday에 2와 같이 순서대로 값이 설정됩니다.

const (
	Sunday       = iota // 0
	Monday              // 1
	Tuesday             // 2
	Wednesday           // 3
	Thursday            // 4
	Friday              // 5
	Saturday            // 6
	numberOfDays        // 7
)

fmt.Println(Thursday)     // 4
fmt.Println(numberOfDays) // 7

여기서 Sunday를 1부터 시작하고 싶다면 iota + 1을 대입하면 됩니다.

iota에 연산자와 특정 값을 조합하면 상수 값을 0, 1, 2, 3처럼 정수 순서대로 생성하지 않고 특정한 순서로 생성할 수 있습니다. iota는 항상 0부터 시작하지만 다음과 같이 시프트 연산자나 곱셈 연산자를 사용하면 됩니다.

const (
	a = 1 << iota // a == 1 (1 << 0)
	b = 1 << iota // b == 2 (1 << 1)
	c = 1 << iota // c == 4 (1 << 2)
	d = 1 << iota // d == 8 (1 << 3)
)

const (
	a = iota * 30 // a == 0 (0 * 30)
	b = iota * 30 // b == 30 (1 * 30)
	c = iota * 30 // c == 60 (2 * 30)
	d = iota * 30 // d == 90 (3 * 30)
)

상수에서 특정 iota 값을 생략하려면 _ (밑줄 문자)를 사용하면 됩니다. 다음은 iota 값을 0, 1, 3만 사용하고 2는 생략한 코드입니다.

const (
	bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
	bit1, mask1                          // bit1 == 2, mask1 == 1
	_, _                                 // iota == 2를 생략하여 bit2와 mask2 생략
	bit3, mask3                          // bit3 == 8, mask3 == 7
)

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01