[Golang] 상수

2021-09-25

Golang에서 상수를 선언하고 사용하는 방법에 대해서 알아봅시다.

개요

이번 블로그 포스트에서는 Golang에서 상수를 선언하고 사용하는 방법에 대해서 알아봅니다. Golang에서 변수를 선언하고 사용하는 방법에 대해 궁금하신 분들은 아래에 링크를 참고하시기 바랍니다.

이 블로그 포스트에서 소개하는 코드는 다음 링크를 통해 확인하실 수 있습니다.

상수

상수는 변수와 다르게 설정한 값을 변경할 수 없습니다. Golang에서 상수를 사용하는 방법을 알아보기 위해 main.go 파일을 생성하고 다음과 같이 수정합니다.

package main

import "fmt"

func main() {
    const num int = 10

    fmt.Println(num)
}

Golang에서 다음과 같이 const 키워드를 사용하여 상수를 선언합니다.

// const 상수명 타입 = 초기값
const value int = 10

상수는 초기값을 생략할 수 있는 변수와 다르게 항상 초기화를 해야합니다. 그렇지 않으면 컴파일 에러가 발생합니다.

const value int = 10
value = 20 // ERROR

한번 초기화된 상수는 다시 값을 설정할 수 없습니다. 값을 설정하게 되면 컴파일 에러가 발생합니다.

상수의 타입

상수도 변수처럼 타입을 지정하지 않고 생략할 수 있습니다. 하지만 상수는 변수와는 다르게 상수를 사용하는 시점에 타입이 결정됩니다.

func main() {
    const PI = 3.14

    var a int = PI * 100

    fmt.Println(a)
}

Golang은 같은 타입만 연산이 가능합니다. 따라서 float 타입인 3.14에 int 타입인 100을 곱하는 연산은 할 수 없습니다. 하지만 상수에 타입을 지정하지 않았으므로, 상수를 사용하는 시점에서 타입이 결정되므로 위에 코드는 컴파일 에러가 발생하지 않습니다.

func main() {
    const PI float32 = 3.14

    var a int = PI * 100 // ERROR

    fmt.Println(a)
}

하지만 위와 같이 상수를 타입과 함께 정의하는 경우, 타입이 다르다고 판단하여 컴파일 에러가 발생하게 됩니다.

func main() {
    var PI = 3.14

    var a int = PI * 100 // ERROR

    fmt.Println(a)
}

변수는 상수와 다르게 변수를 선언할 때, 타입이 결정됩니다. 따라서 위와 같이 상수 대신 변수를 사용하면 컴파일 에러가 발생합니다.

열거형

Golang에서는 상수를 다음과 같이 열거형(Enum)으로 많이 활용합니다.

const (
    Red   int = 0
    Blue  int = 1
    Green int = 2
)

func main() {
    fmt.Println(Red)
    fmt.Println(Blue)
    fmt.Println(Green)
}

프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

0
1
2

iota

Golang에서는 다음과 같이 iota 키워드를 사용하면 좀 더 쉽게 열거형 상수를 생성할 수 있습니다.

const (
    Red int = iota
    Blue int = iota
    Green int = iota
)

func main() {
    fmt.Println(Red)
    fmt.Println(Blue)
    fmt.Println(Green)
}

반복적으로 사용되는 타입과 iota는 다음과 같이 생략이 가능합니다.

const (
    Red int = iota
    Blue
    Green
)

또한, 타입도 생략이 가능하여 다음과 같이 간단하게 선언할 수 있습니다.

const (
    Red = iota
    Blue
    Green
)

완료

이것으로 Golang에서 상수를 선언하고 사용하는 방법에 대해서 살펴보았습니다. 또한 iota를 활용하여 열거형 상수를 생성하는 방법에 대해서도 살펴보았습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts