[IT-방법] Go 변수 구현 방법 단계별 가이드 – 초보 개발자를 위한 핵심 개념과 실전 예제

변수와 상수 개념을 시각화한 Go 프로그래밍 일러스트

왜 Go 프로그래밍에서 변수와 상수를 제대로 이해해야 할까요?

새로운 프로그래밍 언어를 배울 때 가장 먼저 마주하는 장벽은 무엇일까요? 아마도 코드를 작성할 때 데이터를 담는 그릇인 변수와 절대 변하지 않는 상수를 선언하는 방식일 거예요. 파이썬이나 자바스크립트를 쓰던 분들이 Go 언어로 넘어오면 “왜 이렇게 선언 방식이 까다롭지?” 혹은 “이 기호는 대체 무슨 뜻이지?”라며 당황하곤 해요.

실제로 많은 입문자가 코드 작성 중에 변수를 선언만 하고 사용하지 않았다는 오류를 마주하거나, 함수 밖에서 짧은 선언 방식을 사용했다가 컴파일 에러로 고생하곤 해요. 이런 작은 실수들이 반복되면 프로그래밍 자체에 대한 흥미가 떨어질 수 있어요. 하지만 걱정하지 마세요. Go 언어의 엄격한 규칙은 오히려 여러분의 코드를 더 안전하고 깨끗하게 만들어주는 강력한 도구가 된답니다.

이 글을 끝까지 읽고 나면 여러분은 더 이상 변수 선언 때문에 컴파일러와 싸우지 않게 될 거예요. 상황에 따라 어떤 방식으로 데이터를 저장해야 하는지, 그리고 실수 없이 깔끔한 코드를 작성하는 노하우를 완벽하게 습득할 수 있어요.

💡 이 글에서 배우게 될 내용

  • Go 언어의 변수와 상수의 핵심 개념 차이
  • 상황별 최적의 선언 방식(var, :=, const)
  • 실제 프로젝트에 적용 가능한 단계별 구현 절차
  • 초보자가 반드시 겪는 에러와 해결 방법

본격적인 구현 전, 꼭 확인해야 할 사전 지식

Go 변수 구현 방법을 배우기 전에 먼저 환경이 준비되어 있어야 해요. 단순히 코드만 안다고 해서 바로 실행해 볼 수 있는 건 아니거든요. 우선 컴퓨터에 Go SDK가 설치되어 있는지 확인해 주세요. 터미널에서 go version 명령어를 입력했을 때 버전 정보가 출력된다면 준비는 끝난 셈이에요.

또한, 변수를 다루기 전에 데이터의 종류, 즉 자료형(Type)에 대한 개념을 머릿속에 그려두어야 해요. Go는 정적 타입 언어이기 때문에, 변수를 만들 때 이 그릇에 숫자를 담을지, 글자를 담을지 명확히 결정해야 하거든요. 만약 정해두지 않고 아무 데이터나 넣으려고 하면 Go 컴파일러는 즉시 오류를 내뱉으며 여러분을 멈춰 세울 거예요.

아래 표를 통해 우리가 앞으로 사용할 선언 방식들의 특징을 미리 비교해 볼게요. 어떤 상황에 어떤 도구를 꺼내 써야 할지 감을 잡는 데 큰 도움이 될 거예요.

선언 방식 주요 특징 권장 사용 상황
var 키워드 타입을 명시적으로 지정 가능 전역 변수 또는 타입을 명확히 보여줘야 할 때
: (짧은 선언) 타입 추론을 통해 간결하게 선언 함수 내부에서 지역 변수를 빠르게 만들 때
const 키워드 한 번 정하면 값을 바꿀 수 없음 설정값, 수학적 상수 등 고정된 데이터

준비 과정에서 가장 중요한 기준은 데이터의 생명 주기와 변화 가능성이에요. 이 값이 프로그램이 돌아가는 동안 계속 변해야 하는지, 아니면 처음부터 끝까지 고정되어 있어야 하는지를 먼저 판단하는 습관을 들여야 해요. 이 기준만 확실히 세워도 코드의 가독성이 몰라보게 좋아진답니다.

단계별 Go 변수와 상수 구현 실전 가이드

이제 준비는 끝났어요. 실제 코드를 작성하며 Go의 변수와 상수를 어떻게 다루는지 단계별로 깊이 있게 파고들어 볼게요. 각 단계의 예제를 눈으로 따라오면서 직접 타이핑해 보는 것이 가장 빠른 학습 방법이에요.

STEP 1. 기본 중의 기본, var 키워드로 변수 선언하기

가장 표준적인 방법은 var 키워드를 사용하는 것이에요. 이 방식의 가장 큰 장점은 명시성이에요. 어떤 변수가 어떤 타입인지 코드를 보는 사람에게 친절하게 알려줄 수 있거든요.

예를 들어, 사용자의 나이를 저장하는 변수를 만든다면 다음과 같이 작성해요.
var age int = 25
여기서 int는 정수형이라는 타입을 말하고, 25는 그 안에 담길 값이에요. 만약 값을 바로 넣지 않고 변수만 먼저 만들어 두고 싶다면 var age int라고만 적어도 괜찮아요. 이럴 경우 Go는 해당 타입의 제로 값(Zero Value)을 자동으로 할당해 줘요. 정수는 0, 문자열은 “”(빈 문자열), 불리언은 false가 기본값이 된답니다.

STEP 2. 빠르고 간결한 짧은 선언 방식 활용하기

함수 내부에서 코드를 작성할 때는 := 기호를 사용하는 짧은 선언 방식이 정말 유용해요. 타입 이름을 일일이 적지 않아도 Go 컴파일러가 우측에 있는 값을 보고 타입을 알아서 판단해 주거든요.

name := "GoMaster"
이렇게 한 줄만 써도 name은 자동으로 문자열(string) 타입이 돼요. 하지만 여기서 매우 중요한 주의사항이 있어요. 이 방식은 오직 함수 내부(Local Scope)에서만 사용할 수 있다는 점이에요. 프로그램 전체에서 쓰이는 전역 변수를 만들 때는 반드시 var를 사용해야 해요. 만약 함수 밖에서 :=를 쓰려고 하면 컴파일러가 바로 에러를 띄울 거예요.

STEP 3. 변하지 않는 데이터, 상수(const) 선언하기

프로그램을 만들다 보면 절대 변해서는 안 되는 값들이 생겨요. 예를 들어 원주율(Pi)이나, API의 타임아웃 시간 같은 것들이죠. 이런 값들은 const를 사용해 선언해야 해요.

const Pi = 3.14159
상수는 한 번 선언되면 프로그램 실행 중에 그 값을 수정하려고 시도할 때 에러를 발생시켜요. 이는 실수로 중요한 설정값을 바꾸는 사고를 미연에 방지해 주는 아주 고마운 기능이에요. 상수는 숫나, 문자열, 불리언과 같은 기본 타입만 가능하며, 계산을 통해 얻은 결과값을 상수로 지정할 수도 있어요.

STEP 4. 코드를 깔끔하게 만드는 블록 선언법

관련된 변수나 상수가 여러 개 있을 때, 매번 varconst를 반복해서 쓰는 것은 비효율적이에요. 이럴 때는 중괄호 {}를 사용해 그룹으로 묶어줄 수 있어요.

var (
  id int = 1
  username string = "user01"
  isActive bool = true
)

이런 식으로 묶어주면 코드가 훨씬 정돈되어 보이고, 논리적으로 연결된 데이터라는 것을 한눈에 알 수 있어요. 실제 현업에서도 관련된 설정값들을 이렇게 블록 단위로 관리하는 경우가 많답니다.

STEP 5. 실전 시나리오: 사용자 프로필 관리 시스템

지금까지 배운 내용을 모두 합쳐서 간단한 사용자 프로필 정보를 관리하는 시나리오를 만들어 볼게요. 이 코드를 통해 변수와 상수가 어떻게 조화롭게 작동하는지 확인해 보세요.

💡 실전 예제 코드

package main
import "fmt"

// 상수는 함수 밖에서 선언하여 전역적으로 사용해요
const MaxLoginAttempts = 5

func main() {   // var를 사용한 명시적 선언
  var userName string = "Alice"   // :=를 사용한 간결한 선언
  userAge := 30   // 변수 값 변경 가능   userAge = 31
  fmt.Println("사용자 이름:", userName)
  fmt.Println("사용자 나이:", userAge)
  fmt.Println("최대 로그인 시도 횟수:", MaxLoginAttempts)
}

위 예제에서 MaxLoginAttempts는 프로그램이 끝날 때까지 변하지 않는 규칙이에요. 반면 userAge는 시간이 흐름에 따라 변할 수 있는 데이터이므로 변수로 선언했죠. 이렇게 데이터의 성격에 맞춰 선언 방식을 선택하는 것이 바로 Go 구현의 핵심 노하우랍니다.

자주 하는 실수와 해결법

Go를 처음 다루다 보면 누구나 한 번쯤은 겪게 되는 당혹스러운 순간들이 있어요. 시행착오를 줄이기 위해 가장 빈번하게 발생하는 실수 5가지를 정리해 드릴게요.

  • 사용하지 않는 변수 선언 → Go는 사용되지 않는 변수가 있으면 컴파일을 거부해요.
    해결법: 변수를 선언했다면 반드시 코드 어딘가에서 사용하거나, 임시로 테스트 중이라면 _ = 변수명과 같이 빈 식별자를 사용해 무시하세요.
  • 함수 밖에서의 짧은 선언(:=) 사용 → 전역 범위에서는 :=를 사용할 수 없어요.
    해결법: 함수 외부에서 변수를 선언할 때는 반드시 var 키워드를 사용하세요.
  • 상수 값 변경 시도 → 상수는 말 그대로 불변의 값이에요.
    해결법: 값이 바뀌어야 하는 데이터라면 const가 아닌 var로 선언을 바꿔야 해요.
  • 타입 불일치 오류 → 정수형 변수에 실수 값을 넣으려고 하면 에러가 나요.
    해결법: 명시적으로 타입을 맞추거나, 형 변환(Type Conversion)을 통해 타입을 일치시켜 주세요.
  • 변수 재선언 실수 → 같은 스코프 내에서 동일한 이름의 변수를 다시 선언할 수 없어요.
    해결법: 이미 선언된 변수는 :=가 아닌 = 연산자를 사용해 값을 업데이트하세요.

자주 묻는 질문

Q. 변수와 상수의 차이점을 아주 쉽게 설명해 줄 수 있나요?

네, 간단하게 생각하면 변수는 ‘내용물을 계속 바꿀 수 있는 상자’이고, 상수는 ‘한 번 내용을 넣고 풀로 붙여버린 상자’라고 보시면 돼요. 상자는 열어서 내용물을 교체할 수 있지만, 상수는 열 수조차 없다고 상상하시면 이해가 빠를 거예요.

Q. 왜 Go는 사용하지 않는 변수를 허용하지 않을까요?

이는 코드의 깨끗함(Clean Code)을 유지하기 위한 Go의 철학이에요. 사용하지 않는 변수는 메모리만 차지하고, 다른 개발자가 코드를 읽을 때 혼란을 줄 수 있거든요. 컴파일 단계에서 이를 막아줌으로써 불필요한 코드가 쌓이는 것을 방지해요.

Q. := 연산자가 편리해 보이는데, 항상 이것만 쓰면 안 되나요?

편리하지만 위험할 수도 있어요. :=는 타입을 추론하기 때문에, 의도치 않은 타입으로 결정될 수 있거든요. 특히 전역 변수에는 사용할 수 없다는 제약이 있어, 상황에 맞춰 var와 적절히 섞어 쓰는 것이 고수의 방법이에요.

Q. 상수에 계산식을 넣어도 되나요?

네, 가능해요! 다만 그 계산에 사용되는 값들도 모두 상수여야 해요. 예를 들어 const Second = 60, const Minute = Second * 60과 같은 방식은 아주 훌륭한 상수 활용법이에요.

성공적인 Go 프로그래밍을 위한 마무리

지금까지 Go에서 변수와 상수를 어떻게 선언하고 구현하는지 단계별로 살펴보았어요. 처음에는 규칙이 까다롭게 느껴질 수 있지만, 이 규칙들에 익숙해지면 여러분의 코드는 훨씬 견고하고 읽기 쉬운 상태가 될 거예요. 오늘 배운 내용을 잊지 않도록 아래 체크리스트를 꼭 확인해 보세요.

✅ 핵심 요약

  • 데이터가 변한다면 var 또는 :=를 사용하세요.
  • 데이터가 고정되어야 한다면 반드시 const를 사용하세요.
  • := 연산자는 함수 내부에서만 사용할 수 있다는 점을 기억하세요.
  • 사용하지 않는 변수는 Go 컴파일러가 허용하지 않으니 바로 정리하세요.
  • 관련된 데이터는 블록 {}를 사용해 그룹화하면 코드가 깔끔해져요.

이제 이론은 충분해요. 다음 단계로 나아가기 위해 오늘 바로 실천해 볼 수 있는 작은 미션들을 드릴게요.

  • 오늘 할 일: Go 개발 환경을 설정하고 fmt.Println으로 변수 출력해 보기
  • 이번 주 할 일: 다양한 자료형(int, float64, string, bool)을 사용해 자신만의 데이터 묶음 만들어 보기
  • 실행 직전 할 일: 변수를 선언하고 값이 바뀌는 과정과 상수가 에러를 내는 과정을 직접 눈으로 확인하기

변수와 상수를 마스터했다면, 이제 데이터의 흐름을 제어하는 제어문이나 더 복잡한 구조를 담는 구조체(Struct)로 넘어갈 준비가 된 거예요. Go 언어의 매력에 더 깊이 빠져보고 싶다면, 저희가 준비한 다음 시리즈 글도 함께 읽으며 실력을 완성해 보세요!

관련 시리즈 글도 함께 읽고 실력을 완성하세요: /programming/golang/go-variables-constants-complete-guide/

댓글 남기기