chapter 8
에서는 Go 언어에서 상수를 활용하는지에 대해서 설명한다.
1. 상수의 정의
2. 상수 선언법
3. 상수 사용법
4. 열거값 사용법
상수
는 기본적으로 변하지 않는 값을 표현할 때 사용된다. (항)상 (같은)수
라고 이해하면 편하다.변수
는 프로그램 런타임 시, 수시로 변(경 될 수 있는)수
라고 생각하자상수
를 변경하고자 하면, 에러가 발생한다.상수
의 불변성을 통해 프로그래머는 자주 사용되지만 절대로 변경되지 않는 숫자값 혹은 문자열 값을 상수로 지정하여 사용한다.상수
는 컴파일 시, 리터럴
로 치환되어 프로세스 메모리 구조의 Text 영역의 실행 파일 코드 속에 저장된다. 그렇기 때문에, 메모리 주소를 출력할 수 없다.const
키워드를 통해 선언한다. const ConstValue1 int = 10
const ConstValue2 = "CONSTANT_VALUE"
int
, float
complex(복소수)
boolean
rune
, string
rune
은 유니코드(UTF-8)를 제어하기 위한 타입으로 Go언어 에서는 int32
타입을 재정의하여 사용하고 있다. 자세한건 docs를 확인해보자.ConstValue2
와 같이 타입이 명시되지 않은 상수
는 변수에 대입되거나, 연산, 함수 호출과 같이 변수에 복사될 때, 적절한 타입으로 정해진다.상수
의 경우에는 타입을 명시하지 않는 것이 편리한다.상수는 1)변하는 안되는 값을 선언하고자 할 때, 2)코드 값을 통해서 값에 의미를 부여하고자 할 때, 사용한다.
3.141592653589793238...
로 고정된 값이다. 숫자 계산 시, 사용되는 원주율 값이 바뀌어 버리면 문제가 발생할 수 있다.HTTP
프로토콜에서 응답코드 200
은 OK를 의미하는 것을 알고 있다. 이처럼 특정 숫자나 문자에 의미가 있을 때, 상수를 사용하면, 오탈자 혹은, 가독성 차원에서 안전한 프로그램을 생산할 수 있다.animal:="Pig"
const Pig = "Pig"
animal = Pig
Enum
을 통해서 열거 상수를 제어할 수 있다. Go에서는 iota
키워드를 통해서 순차적으로 0부터 하나씩, 열거 상수를 제어할 수 있다.iota
는 소괄호에 묶인 초기화 코드 블록안에서만 유효하고, 이를 벗어나면 다시 초기값으로 iota
가 진행하던 값들의 순서가 초기화된다. 즉, 0부터 다시 시작한다.package main
import "fmt"
const (
RED int = iota // 0
BLUE int = iota // 1
GREEN int = iota // 2
)
const (
C1 uint = iota + 1 // 1 + 0 = 1
C2 // 1 + 1 = 2
C3 // 1 + 2 = 3
)
const (
BIG_FLAG1 uint = 1 << iota //1 << 0 = 1
BIG_FLAG2 // 1 << 1 = 2
BIG_FLAG3 // 1 << 2 = 4
BIG_FLAG4 // 1 << 3 = 8
)
func main() {
fmt.Println(RED, BLUE, GREEN)
fmt.Println(C1, C2, C3)
fmt.Println(BIG_FLAG1, BIG_FLAG2, BIG_FLAG3, BIG_FLAG4)
}