Chapter 6. const

조성권·2021년 8월 8일
0
post-thumbnail

오늘은 상수(=const) 사용법에 대해 알아보도록 하겠다.
상수: 소스 코드에서 고정된 값을 체계적으로 관리할 때 사용

1. 상수

1-1 상수 초기화

golang에서 상수를 초기화하는 방법에 대해 알아보겠다.

const INF int = 1e9
const NAME string = "조성권"

fmt.Println(INF)
fmt.Println(NAME)

const data int	// Compile Error
data := 10

상수는 한번 값을 초기화한 후엔 변경이 불가하다.
이는 상수를 사용하는 목적이 고정된 값을 체계적으로 관리함에 있기 때문이다.

또한, 위 예시를 통해 한가지 더 중요한 사실을 알 수 있다.
상수(=const)는 변수를 선언함과 동시에 초기화해줘야 한다는 것이다.
이를 어길 시, Compile Error가 발생하기 때문에 주의해야 한다.

  • 상수는 한번 값을 정의하면 변경이 불가하다.
  • 상수는 선언과 동시에 초기화 해줘야 한다.

1-2 복수개의 상수 정의

이번에는 여러 개의 상수를 정의해야 할 때, 조금 더 간편하게 작성하는 방법에 대해 알아보겠다.

// Case 1.
const num1, num2 int = 10,20
const num3, string1 = 30, "조성권"

// Case 2.
const (
	num1, num2 int = 10,20
    	num3, string1 = 30, "조성권"
)

두 Case는 모두 문제없이 동작한다.
그렇기 때문에 두가지 Case 중, 자신의 스타일에 맞는 유형을 선택해서 작성하면 될 것 같다.

또한, 위 예시에서 주목할 점은 자료형을 직접 강제했는지 이다.

const num1, num2 int = 10, 20 // 자료형 int로 강제
const num3, string1 = 30, "조성권" // 자료형을 따로 기입하지 않음

사실, golang은 자료형 Type을 직접적으로 강제하지 않아도 값에 맞게끔 맞춰준다.
특히, 입력하고자 하는 값이 서로 다른 Type일 경우, 한 라인으로 처리가 어려우므로 개인적으로 Type을 굳이 기입하지 않는 것을 추천한다.

2. 열거형

2-1 열거형 사용

상수를 사용하는 이유 중, 하나로 연속되는 값을 가지는 경우가 있다.
예를 들어, 요일에 사용되는 예시를 통해 살펴보겠다.

const (
	sunday = 0
	monday = 1
	tuesday = 2
	wednesday = 3
	thursday = 4
	friday = 5
	saturday = 6
)

위와 같이 요일에 대한 value를 미리 지정한 후, 로직에서 사용할 수 있다.

2-2 iota

하지만 2-1처럼 직접 value를 넣는 방법보다 더 빠른 방법이 있다.
바로, iota를 사용하는 것이다.

const (
	sunday = itoa	// 0
	monday		// 1
	tuesday		// 2
	wednesday	// 3
	thursday	// 4
	friday		// 5
	saturday	// 6

위와 같이 iota를 사용하게 되면 0부터 시작하여 연속되는 숫자로 변수에 값을 저장하게 된다.

iota와 연산자 or 특정 값을 조합하면 다른 패턴의 상수를 생성할 수도 있다.

// Case 1.
const (
	a = 1 << iota	// a==1 (1 << 0)
    b = 1 << iota	// b==2 (1 << 1)
    c = 1 << iota	// c==4 (1 << 2)
    d = 1 << iota	// d==8 (1 << 3)
)

// Case 2.
const (
	a = iota * 30	// a==0 (0*30)
    b = iota * 30	// b==30 (1*30)
    c = iota * 30	// c==60 (2*30)
    d = iota * 30	// d==90 (3*30)
)
  • Case 1: 시프트 연산자를 통해 2의 제곱 단위로 값이 올라가는 패턴
  • Case 2: 곱셈(*) 연산자를 통해 30의 배수 단위로 값이 올라가는 패턴

위와 같이, 조합을 통해 다양한 패턴의 상수를 비교적 간단하게 작성할 수 있다.
만약, 열거형을 사용해야 하고 패턴이 존재한다면 iota를 적극 활용하면 좋을 것 같다.

마무리

오늘은 상수를 사용하는 방법에 대해 배워봤다.
상수는 고정된 값을 위해 사용되고 수정이 불가하기 때문에 정말 필요한 부분이 아니면 많이 사용하지 않아 가물가물했는데 이번 기회를 통해 다시 한번 상기시킬 수 있었다.
점점 기본적인 golang 문법에 대해 많이 알아가고 있는 것 같다.
아직도 기초적인 부분이기 때문에 갈 길이 멀지만 이렇게 계속 나아가다 보면 언젠가 golang을 마스터하는 날이 오지 않을까...ㅎ

전체 소스 git 링크
https://github.com/cho876/Go/blob/main/Prac06/prac06.go

profile
천천히, 완벽히 배워나가고자 하는 웹 서비스 엔지니어

0개의 댓글