
왜 Go 변수와 상수를 제대로 알아야 할까요
처음 Go 언어를 설치하고 코드를 입력하기 시작하면 가장 먼저 마주하는 벽이 바로 변수 선언이에요. 분명히 강의에서는 간단하게 알려줬는데, 막상 직접 타이핑을 하면 컴파일 에러가 쏟아지며 화면이 붉게 물드는 경험을 자주 하게 되죠. 특히 변수를 선언했는데 왜 사용하지 않았다고 혼나는지, 혹은 왜 어떤 곳에서는 짧은 선언 방식을 쓰고 어떤 곳에서는 길게 쓰는지 몰라 막막할 때가 많아요.
이런 혼란은 단순히 문법을 몰라서 생기는 문제가 아니에요. Go 언어가 가진 고유한 설계 철학인 엄격함을 이해하지 못했기 때문에 발생하는 현상이에요. Go는 다른 언어보다 훨씬 깐깐하게 변수를 관리해요. 하지만 이 규칙만 제대로 익히면 오히려 버그를 줄이고 훨씬 깔끔한 코드를 작성할 수 있는 강력한 무기가 된답니다.
오늘 이 가이드를 끝까지 읽고 나면 여러분은 더 이상 변수 선언 앞에서 망설이지 않게 될 거예요. 복잡한 이론 대신, 실제 개발 현장에서 어떤 방식으로 변수를 만들고 상수를 사용하는지 실무적인 관점에서 핵심만 짚어드릴게요.
이 글에서 배우게 될 핵심 내용
- Go 언어 특유의 변수 선언 방식 두 가지 완벽 이해
- 데이터 타입 선택 시 고려해야 할 실무적인 기준
- 상수를 사용하여 코드의 안정성을 높이는 방법
- 초보자가 가장 많이 저지르는 실수와 해결책
코딩 시작 전 반드시 체크해야 할 준비물
본격적으로 변수를 선언하기 전에, 여러분의 컴퓨터가 Go 코드를 받아들일 준비가 되었는지 확인해야 해요. 단순히 텍스트 편집기만 있다고 해서 개발을 시작할 수 있는 건 아니거든요. 개발 환경이 불안정하면 문법 공부보다 에러 메시지를 해석하는 데 더 많은 시간을 쓰게 되어 금방 지칠 수 있어요.
개발 환경 구성 요소
가장 먼저 Go 컴파일러가 설치되어 있어야 해요. 명령 프롬프트나 터미널에서 설치 여부를 확인하는 습관을 들이는 게 좋아요. 그리고 코드를 작성할 도구인 IDE가 필요한데, 많은 전문가가 사용하는 VS Code(Visual Studio Code)에 Go 확장 프로그램을 설치하는 것을 추천해요. 이렇게 하면 변수를 선언할 때 실시간으로 오타를 잡아주어 학습 효율이 엄청나게 올라가요.
Go 언어는 변수를 선언만 하고 사용하지 않으면 컴파일 단계에서 즉시 에러를 발생시켜요. 이는 코드를 깨끗하게 유지하기 위한 Go만의 강력한 규칙이에요.
데이터 타입 선택 기준 비교
변수를 만들 때는 그 안에 담을 데이터의 성격에 맞는 타입을 골라야 해요. 잘못된 타입을 선택하면 나중에 데이터 형 변환 과정에서 복잡한 계산을 거쳐야 하거나, 메모리를 낭비하게 될 수도 있어요. 아래 표를 통해 상황에 맞는 타입을 결정하는 기준을 확인해 보세요.
| 데이터 성격 | 추천 타입 | 선택 기준 및 특징 |
|---|---|---|
| 정수(숫자) | int | 가장 일반적인 정수형으로, 특별한 이유가 없다면 기본적으로 사용해요. |
| 소수점이 있는 숫자 | float64 | 정밀한 계산이 필요한 경우 사용하며, 기본적으로 64비트 형을 권장해요. |
| 글자/문장 | string | 텍스트 데이터를 담을 때 사용하며, 따옴표를 사용하여 표현해요. |
| 참/거짓 상태 | bool | 조건문에서 사용되는 논리값으로, true 또는 false만 가질 수 있어요. |
실전! Go 변수와 상수 완벽 구현하기
이제 환경 설정이 끝났다면 직접 코드를 작성하며 몸으로 익힐 차례예요. Go의 변수 선언은 크게 두 가지 갈래로 나뉘는데, 이 차이를 명확히 아는 것이 입문 단계에서 가장 중요한 고비예요. 각 단계를 차근차근 따라오면서 직접 타이핑해 보세요.
STEP 1. 정석적인 변수 선언법 익히기
가장 기본적인 방법은 키워드 var를 사용하는 것이에요. 이 방식은 변수의 이름과 데이터 타입을 명시적으로 선언해요. 주로 함수 밖의 전역 공간에서 변수를 만들거나, 변수의 타입을 아주 분명하게 보여주고 싶을 때 사용해요. 예를 들어, var age int = 25와 같은 식으로 작성하죠. 이렇게 쓰면 코드를 읽는 다른 개발자가 “아, age라는 변수에는 정수형 데이터가 들어오는구나”라고 즉시 알 수 있어 가독성이 매우 높아져요.
STEP 2. 빠르고 간결한 단축 선언법 활용하기
함수 내부에서 코드를 작성할 때는 훨씬 효율적인 방법이 있어요. 바로 단축 선언 연산자 :=를 사용하는 거예요. 이 방식은 타입을 따로 적지 않아도 Go가 오른쪽에 있는 값을 보고 자동으로 타입을 결정해 줘요. 예를 들어, name := “Go입문자”라고 적으면 Go는 알아서 name을 string 타입으로 지정해요. 코드가 훨씬 간결해지고 작성 속도도 빨라지죠. 하지만 주의할 점은 이 방식은 반드시 함수 내부에서만 사용 가능하다는 점이에요. 함수 밖에서 사용하려고 하면 에러가 발생하니 꼭 기억하세요.
STEP 3. 변하지 않는 값, 상수(const) 다루기
프로그램을 만들다 보면 값이 절대 변해서는 안 되는 경우를 마주하게 돼요. 예를 들어 원주율(π)이나 시스템의 최대 접속자 수 같은 값들이죠. 이런 값들을 변수로 만들면 실수로 값을 수정했을 때 프로그램 전체가 꼬일 수 있어요. 이때 사용하는 것이 바로 const 키워드예요. 상수로 선언된 값은 프로그램이 실행되는 동안 단 한 번도 바꿀 수 없어요. 만약 상수를 수정하려고 시도하면 컴파일러가 즉시 제동을 걸어주기 때문에 매우 안전한 코딩이 가능해져요.
상수는 컴파일 시점에 값이 결정되어야 해요. 즉, 프로그램이 실행될 때 계산되는 함수의 결과값 등을 상수로 지정할 수는 없다는 점을 유의해야 해요.
STEP 4. 초기값이 없을 때의 동작 이해하기
Go 언어의 아주 독특한 특징 중 하나는 변수를 선언만 하고 값을 넣지 않아도 에러가 나지 않는다는 점이에요. 이를 제로 값(Zero Value)이라고 불러요. 값이 지정되지 않은 변수에는 타입에 따라 미리 약속된 기본값이 자동으로 들어가요. 정수는 0, 불리언은 false, 문자열은 빈 칸(“”)이 기본적으로 할당되죠. 이 개념을 모르면 변수에 값이 들어있다고 착각하여 예상치 못한 논리 오류를 범할 수 있으니 꼭 숙지해 두어야 해요.
STEP 5. 실전 시나리오: 사용자 프로필 관리하기
배운 내용을 종합해서 실제 프로그램에서 어떻게 쓰이는지 시나리오를 살펴볼게요. 사용자 정보를 담는 간단한 로직을 만든다고 가정해 봅시다.
먼저, 서비스의 이름처럼 절대 변하지 않는 값은 상수로 선언해요. 사용자 이름이나 나이처럼 계속 바뀔 수 있는 정보는 변수를 사용하죠. 만약 사용자가 로그인했을 때 나이가 20세 미만이라면 경고를 띄우는 로직을 짠다면, 다음과 같은 구조가 될 거예요.
- 서비스 이름(상수): “MyAwesomeApp”
- 사용자 이름(변수): “홍길동”
- 사용자 나이(변수): 18
- 접속 가능 여부(변수): true/false
이처럼 값의 성격에 따라 변수와 상수를 명확히 구분하는 습관을 들이면, 나중에 코드가 수만 줄로 늘어나더라도 어디서 데이터가 변했는지 추적하기가 훨씬 쉬워진답니다.
자주 하는 실수와 해결법
초보 개발자들이 Go 코드를 작성할 때 가장 많이 좌절하는 순간은 에러 메시지를 만났을 때예요. 하지만 대부분의 에러는 정해진 규칙을 살짝 어겼을 때 발생하죠. 자주 발생하는 실수들을 모아봤어요.
- ❌ 변수를 선언만 하고 사용하지 않음
→ 왜 발생하는가: Go는 메모리 효율을 위해 쓰이지 않는 변수를 허용하지 않아요.
✅ 해결법: 사용하지 않는 변수는 즉시 삭제하거나, 디버깅 용도로라도 값을 출력해 보세요. - ❌ 함수 밖에서 단축 선언( := ) 사용
→ 왜 발생하는가: 단축 선언은 지역 변수를 위한 문법이라 전역 공간에서는 쓸 수 없어요.
✅ 해결법: 함수 밖에서는 반드시 var 키워드를 사용하세요. - ❌ 상수 값을 나중에 변경하려고 시도
→ 왜 발생하는가: 상수는 이름 그대로 상수로 고정된 값이기 때문이에요.
✅ 해결법: 값이 바뀌어야 한다면 상수가 아닌 변수로 선언해야 해요. - ❌ 서로 다른 타입끼리 계산하려고 함
→ 왜 발생하는가: Go는 정수와 실수의 연산을 매우 엄격하게 구분해요.
✅ 해결법: 형 변환(Type Conversion)을 통해 타입을 일치시켜 주세요. - ❌ 변수 이름을 중복해서 선언함
→ 왜 발생하는가: 동일한 범위 내에서 같은 이름의 변수는 존재할 수 없어요.
✅ 해결법: 변수 이름을 더 구체적으로 짓거나, 기존 변수를 재사용하세요.
자주 묻는 질문
Q. Go에서 변수 선언을 할 때 항상 타입을 적어줘야 하나요?
아니요, 함수 내부라면 단축 선언 방식을 통해 타입을 생략할 수 있어요. 하지만 함수 밖이나 명확한 의미 전달이 필요한 곳에서는 타입을 적어주는 것이 훨씬 좋습니다.
Q. 상수와 변수의 차이를 한 문장으로 요약한다면 무엇인가요?
변수는 담긴 내용을 바꿀 수 있는 상자이고, 상수는 절대 열거나 바꿀 수 없는 고정된 명판이라고 생각하면 쉬워요.
Q. 왜 Go는 사용하지 않는 변수에 대해 에러를 내나요?
코드가 깔끔하지 못하면 나중에 유지보수할 때 혼란을 주기 때문이에요. 쓰지 않는 변수를 방치하는 것은 불필요한 메모리를 차지하고 코드의 가독성을 떨어뜨리는 행위로 간주해요.
Q. 숫자 10을 넣었는데 왜 float 타입으로 안 변하나요?
Go는 타입을 매우 엄격하게 다뤄요. 10은 정수(int)로 인식되며, 소수점이 필요하다면 반드시 10.0처럼 작성하거나 float64로 형 변환을 해줘야 해요.
Q. 제로 값(Zero Value)을 직접 설정해 주는 게 좋을까요?
아니요, Go가 자동으로 처리해 주므로 굳이 0이나 false를 직접 대입할 필요는 없어요. 오히려 코드가 지저분해질 수 있으니 기본 동작을 믿고 맡기셔도 돼요.
성공적인 Go 코딩을 위한 마무리
오늘 우리는 Go 언어의 가장 기초적이면서도 중요한 뿌리인 변수와 상수에 대해 깊이 있게 살펴봤어요. 처음에는 이 규칙들이 까다롭고 불편하게 느껴질 수 있지만, 이 규칙들이 결국 여러분이 작성한 코드를 더 안전하고 견고하게 만들어준다는 사실을 꼭 기억해 주세요.
- 전역 변수는 var를, 함수 내부 변수는 :=를 사용하세요.
- 절대 변하지 않는 값은 반드시 const로 선언해 안전성을 확보하세요.
- 데이터의 성격에 맞는 타입을 미리 결정하는 습관을 들이세요.
- 사용하지 않는 변수는 즉시 정리하여 컴파일 에러를 방지하세요.
- 값이 지정되지 않으면 제로 값이 할당된다는 점을 잊지 마세요.
자, 이제 이론은 충분해요. 이제 직접 에디터를 켜고 한 줄이라도 코드를 적어보는 게 중요해요. 오늘 배운 내용을 바탕으로 아래 계획을 실천해 보세요.
- 오늘 할 일: Go 컴파일러 설치하고 터미널에서 “Hello, World!” 출력해 보기
- 이번 주 할 일: 변수 5개와 상수 2개를 사용하여 간단한 사용자 프로필 출력 프로그램 만들기
- 실행 직전 할 일: 자주 틀리는 에러 메시지 3가지만 다시 한번 읽어보기
변수와 상수를 마스터했다면, 이제 데이터의 묶음인 배열과 슬라이스로 나아갈 준비가 된 거예요. 다음 편에서는 더 강력한 데이터 구조를 다룰 예정이니, 구독을 통해 가장 빠르게 핵심 노하우를 받아보세요!
함께 읽으면 도움이 되는 글: /programming/golang/go-variables-constants-complete-guide/