[Tucker의 Go 언어 프로그래밍] 08장 상수

Coen·2023년 10월 3일
1

tucker-go

목록 보기
5/18
post-thumbnail

이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 08장 써머리입니다.

08장 상수

8.1 상수 선언

  • 상수는 변하지 않는 값을 말한다.

  • 구조체, 배열 등 기본타입(primative)가 아닌 타입에는 상수 사용 불가.

  • Go 에서 상수로 사용될 수 있는 타입은 아래와 같다.

    • Boolean
    • rune
    • 정수
    • 실수
    • 복소수
    • 문자열
  • 상수의 선언 방식

    const ConstValue int = 10

  • 상수는 값으로만 동작하기 때문에 좌변에 올 수 없다.

  • 변수는 값, 이름, 타입, 메모리 주소의 4가지 속성을 가지지만 상수는 메모리 주소가 없다.

8.2 상수는 언제 사용하나?

  1. 변하면 안되는 값에 사용.
  2. 코드값을 통해 숫자에 의미를 부여할 때 사용

8.2.1 변하면 안되는 값에 상수 사용하기

  • 변하지 않는 값에 이름을 부여할때 사용한다.

8.2.2 코드값으로 사용하기

  • 코드값이란 어떤 숫자에 의미를 부여하는 것을 말한다.(ex. HTTP 응답코드값, ASCII...)

8.2.3 iota로 간편하게 열거값 사용하기

  • 코드값으로 사용하기 때문에 값이 그냥 1, 2, 3... 과 같이 1씩 증가하도록 정의할때 iota키워드를 사용하면 편리하다.
const (
	Red   int = iota // 0
    Blue  int = iota // 1
	Green int = iota // 2
)

const (
	BitFlag1 uint = 1 << iota // 1 = 1 << 0
    BitFlag2 uint             // 2 = 1 << 1
    BitFlag3 uint             // 4 = 1 << 2
    BitFlag4 uint             // 8 = 1 << 3
)

8.3 타입 없는 상수

  • 상수 선언 시 타입을 명시하지 않을 수 있다.
const (
	PI 				= 3.14
    FloatPI float64 = 3.14
)

func main() {
	var a int = PI * 100 // 314
    var b int = FloatPI * 100  // Float와 정수 계산 불가로 에러 발생
}
  • 타입 없는 상수는 변수에 복사될 때 타입이 정해지기 때문에 여러 타입에 사용되는 상수값을 사용할 때 편리하다.

8.4 상수와 리터럴

리터럴이란 고정된 값, 값 자체로 쓰인 문구

var str string = "Hello World"
var i int = 0
i = 30
  • 고정된 값 자체로 쓰인 "Hello World", 0, 30 이 리터럴이다.
  • Golang에서 상수는 리터럴과 같이 취급됨.
  • 컴파일 시점에 상수는 리터럴로 변환되어 실행 파일에 쓰인다.
  • 상수 표현식 계산에 CPU 자원을 사용하지 않는다.
const PI = 3.14
var a int = PI * 100 
// 위 코드는 컴파일 시점에 var a int = 314 로 변환된다.
  • 상수의 메모리 주소값에 접근할 수 없는 이유 역시 컴파일 타임에 리터럴로 전환되어서 실행 파일에 값 형태로 쓰이기 때문이다.
  • 동적 할당 메모리 영역을 사용하지 않는다!
profile
백엔드 프로그래머

0개의 댓글