Go 언어에서 변수와 상수 다루기

변수 선언의 기본

Go에서는 var 키워드를 사용해 변수를 선언할 수 있습니다. 이 방식은 변수 이름과 자료형을 명시하며, 초기값을 동시에 할당할 수도 있습니다.

package main

import "fmt"

func main() {
    var name string = "kim"
    fmt.Println(name)
}

여기서 name은 문자열 타입의 변수이며, 값으로 "kim"을 가지게 됩니다. Go는 정적 타입 언어이므로, 타입에 맞지 않는 값을 할당하면 컴파일 오류가 발생합니다.

여러 변수 한 번에 선언하기

같은 타입의 여러 변수를 한 줄에서 선언하고 초기화할 수 있습니다.

var x, y int = 10, 20

또는 블록 형식으로 서로 다른 타입의 변수도 그룹화하여 선언 가능합니다.

var (
    title string = "Go Study"
    age   int    = 25
    valid bool   = true
)

제로 값 (Zero Value)

Go에서는 변수를 선언만 하고 초기화하지 않으면 자동으로 해당 타입의 기본값인 제로 값이 할당됩니다.

  • int → 0
  • string → "" (빈 문자열)
  • bool → false
  • 포인터 → nil
var count int
var message string
fmt.Println(count, message) // 출력: 0 ""

짧은 변수 선언 (: =)

함수 내부에서는 := 연산자를 사용해 더 간결하게 변수를 선언할 수 있습니다. 이 경우 타입을 생략하고, 컴파일러가 값을 기반으로 타입을 추론합니다.

func main() {
    result := "success"
    code := 200
    active := true
    fmt.Println(result, code, active)
}

단, 이 구문은 함수 외부에서는 사용할 수 없으며, 항상 새로운 변수를 선언할 때만 사용해야 합니다.

선언 스타일 비교

다음은 동일한 변수를 다양한 방식으로 선언하는 예입니다.

var a string = "hello"
var b = "world"
var c string
c = "test"
d := "short"

모두 유효하지만, 일반적으로 짧은 선언(:=)이 함수 내에서 가장 흔히 쓰입니다.

변수의 스코프 (유효 범위)

Go의 변수 스코프는 블록 기반입니다. 중괄호 {} 안에서 선언된 변수는 해당 블록 내에서만 접근 가능합니다. 패키지 레벨에서 선언된 변수는 패키지 전체에서 사용할 수 있으며, 대문자로 시작하는 이름은 외부 패키지에서도 참조 가능합니다.

포인터를 통한 값 참조

Go는 포인터를 지원하며, 변수의 메모리 주소를 직접 다룰 수 있습니다. 이를 통해 함수 간에 값을 효율적으로 공유하거나 수정할 수 있습니다.

func multiply(p, q *int) int {
    return *p * *q
}

func main() {
    num1, num2 := 4, 5
    total := multiply(&num1, &num2)
    fmt.Println(total) // 출력: 20
}

상수(const)의 사용

상수는 프로그램 실행 중 변하지 않는 값을 정의할 때 사용되며, const 키워드로 선언합니다. 반드시 선언과 동시에 값을 초기화해야 하며, 이후 재할당은 불가능합니다.

const MaxUsers = 100
const Version = "v1.2.0"

상수는 숫자, 문자열, 불리언 등 리터럴 값에 사용되며, 컴파일 시 결정됩니다.

익명 변수 (_)의 활용

함수에서 반환값 중 일부를 무시하고 싶을 때 언더스코어(_)를 사용합니다. 이는 실제로 메모리를 할당하지 않으며, 이름 충돌도 발생하지 않습니다.

func getData() (int, string) {
    return 99, "ignored"
}

func main() {
    _, text := getData()
    value, _ := getData()
    fmt.Println(text, value)
}

예제에서 보듯, 필요 없는 반환값은 _로 버릴 수 있어 코드의 의도를 명확히 전달할 수 있습니다.

전역 및 함수 내 선언 규칙

패키지 수준(함수 외부)에서는 모든 선언이 var, const, func 등의 키워드로 시작해야 하며, :=는 사용할 수 없습니다. 이는 문법적으로 필수적인 제약입니다.

태그: go 변수 선언 const 포인터 스코프

6월 4일 17:09에 게시됨