[Go 언어] 13. iota를 사용하여 규칙적인 상수 열거하기

안녕하세요. 언제나 휴일, 언휴예요.

이전 게시글에서는 const 키워드를 이용하여 상수를 표현하는 방법을 살펴보았어요. 이번 게시글에서는 const 키워드와 괄호, iota를 이용하여 상수를 열거하는 방법을 살펴보아요.

프로그래밍에서 특정 변수가 갖을 수 있는 값의 종류를 한정하여 사용하거나 여러 종류의 값을 여러 개의 상수명에 정의하여 사용하면 효과적일 때가 많이 있어요. 이전 게시글에서 얘기한 것처럼 가독성이 높아지고 변경이 쉬워집니다.

새 프로젝트를 만들어 하나 하나 표현해 보기로 해요.

[그림 1] LiteIDE에서 새 프로젝트 생성 및 소스 파일 추가
// Example itoa 사용
package main
 
import "fmt"
 
func main() {
    const (
        JAN = iota + 1
        FEB
        MAR
        APR
        MAY
        JUN
        JUL
        AUG
        SEP
        OCT
        NOV
        DEC
    ) //월
    fmt.Println("JAN:", JAN)
    fmt.Println("JUL:", JUL)
    fmt.Println("DEC:", DEC)
   
    const (
        c0 = iota * 10
        c1 = iota * 10
        c2 = iota * 10
        c3 = iota * 10
        c4 = iota * 10
    )//10씩 증가하는 상수
    fmt.Println("c1:", c1)
    fmt.Println("c1:", c2)
    fmt.Println("c1:", c3)
    fmt.Println("c1:", c4)
}

const 키워드와 ( )를 사용하여 여러 개의 상수를 정의할 때 상수명 뒤에 초기값 표현에 iota를 지정하면 첫번째 상수값은 0으로 정의하고 이후의 상수값은 설정하지 않아도 순차적으로 1씩 증가한 값으로 설정합니다.

  • 첫번째 상수명에 iota로 상수값을 지정하여 1월부터 12월까지 상수 정의하기
    const (
        JAN = iota + 1
        FEB
        MAR
        APR
        MAY
        JUN
        JUL
        AUG
        SEP
        OCT
        NOV
        DEC
    ) //월
    fmt.Println("JAN:", JAN)
    fmt.Println("JUL:", JUL)
    fmt.Println("DEC:", DEC)

출력 결과는 다음과 같아요.

JAN: 1
JUL: 7
DEC: 12    

iota에 같은 연산으로 값을 지정하는 표현으로 여러 개의 규칙적인  상수를 열거할 수도 있어요.

  • iota*10 을 상수값으로 지정하여 10씩 증가하는 상수 정의하기
    const (
        c0 = iota * 10
        c1 = iota * 10
        c2 = iota * 10
        c3 = iota * 10
        c4 = iota * 10
    )//10씩 증가하는 상수
    fmt.Println("c1:", c1)
    fmt.Println("c1:", c2)
    fmt.Println("c1:", c3)
    fmt.Println("c1:", c4)

출력 결과는 다음과 같아요.

c1: 10
c1: 20
c1: 30
c1: 40
[그림 2] iota를 사용하여 규칙적인 상수 열거하기 예제 실행 화면