위키피디아에서는 enum 자료형을 식별성을 갖는 상수로 정의하고 있습니다.
Effective Go에는 enum을 Constants로 정의 한 후 iota라는 enumerator를 제공합니다. iota를 통해 값을 할당받은 변수들은 행이 바뀔때 차례로 증가 하고 정수로써 다루어 집니다.
문자열로 표현된 enum을 사용하고 싶다!
- 지정된 값만 사용하기
- 의미를 알 수 있도록 선언하기
- 타입으로 유효성을 검사하기
이러한 이유 때문에 const로 선언된 변수에 문자열을 할당하고 싶었습니다.
하지만 이렇게 하면 지정되지 않은 값을 사용해도 에러가 발생하지 않습니다. 왜냐하면 할당된 값이 특정타입을 나타내지 않는 string이기 때문입니다. 이러한 문제를 보완하기 위해서 Type에 값을 할당 할 수 있습니다.
Java에서는 enum도 독립된 class이기 때문에 상태와 행위를 함께 묶을 수 있습니다. 그런데 Golang을 사용하는 우리 팀은 상태와 행위를 함께 관리 하기위해 임시방편으로 var를 사용했었고 코드 리뷰를 통해 오사용을 방지 하고 있습니다. 그렇지만 변경될 여지가 있어서 2% 부족 합니다.
Go에서는 Java에서 제공하는 Enums 타입은 존재하지 않는다. 하지만, Go에서도 iota를 이용해서 Enums과 같은 상수값을 쉽게 선언하여 사용할 수 있다.
매번 iota 키워드를 사용하지 않고 한번만 선언하면 나머지 변수에는 연속적인 값이 선언된다.