본문 바로가기
golang (go)

golang - const와 iota로 enum(열거)형 구현하기

by first author 2023. 11. 18.
728x90
반응형
반응형

 

우리는 다양한 서적, 베스트 케이스에서 특정 상황을 비교할 때 boolean, integer 과 같은 자료형다는 enum(열거)형을 사용하라는 것을 많이 들었을 거다. 

 

그런데 golang에서는 enum 자료형이 존재하지 않는다. 

그럼 어떻게 해야할까?

 

일반적으로 golang 에서는 enum을 구현하기 위해 아래와 같이 자료형을 정의하고 값을 상수(const)로 정의해서 사용한다.

예를 들어 우선 Status라는 상태를 나타내는 int 타입의 자료형을 정의한다.

그리고 Status에 해당하는 값들(WAITING, RUNNING, COMPLETE, FAILED)을 상수로 정의한다.

type Status int

const (
	WAITING  Status = iota		//0
	RUNNING  Status = iota		//1
	COMPLETE Status = iota		//2
	FAILED   Status = iota		//3
)

 

이 때 겹치지 않는 값으로 상수를 하나씩 정의하는 것은 귀찮은 작업이 될 수 있다.

여기서 Int 자료형으로 선언한 이유를 알 수 있다.

 

iota를 이용하면 순서대로 0, 1, 2 와 같이 정수가 하나씩 증가하면서 값이 할당된다.

이마저도 iota를 이용하여 값을 할당하면 아래와 같이 맨 위의 상수에서한번만 값을 정의해도 된다. 

type Status int

const (
	WAITING  Status = iota			//0
	RUNNING  				//1
	COMPLETE 				//2
	FAILED   				//3	
)

 

이렇게 자료형을 정의해서 상수로 정의한 값은 아래와 같이 enum 형 처럼 똑같이 사용할 수 있다.

 

func main() {
	status := RUNNING

	switch stat {
	case COMPLETE:
		fmt.Println("성공적으로 종료하였습니다.")
	case FAILED:
		fmt.Println("실패하였습니다.")
	case RUNNING:
		fmt.Println("실행 중 입니다.")
	case WAITING:
		fmt.Println("시작되기를 기다리는 중 입니다.")
	}
}

 

결과 

실행 중 입니다.

 

golang에서는 이처럼 type으로 자료형을 하나 만들어주어야 한다는 수고만 있다면 간단한 enum형을 구현하여 사용할 수 있다.

728x90
반응형

댓글