
Go 프로그래밍의 시작, 변수와 상수의 벽을 넘으세요
Go 언어로 첫 코드를 작성할 때, 가장 먼저 마주하는 당혹스러운 순간이 있어요. 바로 “unused variable”이라는 에러 메시지를 보는 상황이에요. 다른 언어에서는 대충 선언해 두고 나중에 쓰기도 하지만, Go는 선언만 하고 사용하지 않는 변수를 절대 허용하지 않거든요. 이런 엄격함 때문에 초보 개발자들은 시작부터 당황하기 일쑤예요.
또한, “왜 이 값을 바꿀 수 없지?”라며 상수에 값을 넣으려다 오류를 겪기도 하고, 타입이 맞지 않는다는 복잡한 에러 메시지에 가로막히기도 해요. Go는 정적 타입 언어이기 때문에 변수의 성격과 상수의 역할을 정확히 이해하지 못하면 코드 한 줄 넘기기가 쉽지 않아요.
하지만 걱정하지 마세요. 이 기초적인 문법만 제대로 잡아두면 Go의 강력한 타입 시스템은 오히려 여러분의 실수를 막아주는 든든한 방패가 되어줄 거예요. 메모리를 효율적으로 쓰고, 버그가 적은 탄탄한 프로그램을 만드는 첫걸음은 바로 변수와 상수를 제어하는 능력에서 시작된답니다.
이 글을 모두 읽고 나면 다음과 같은 것들을 완벽히 다룰 수 있게 돼요.
- Go의 다양한 변수 선언 방식과 상황별 선택 기준
- 데이터의 종류에 따른 적절한 자료형 선택법
- 상수를 활용해 코드의 안정성을 높이는 방법
- 실전에서 바로 써먹는 핵심 문법 패턴
본격적인 코딩 전, 반드시 알아야 할 기본 개념
Go 언어에서 변수를 다루기 전에 몇 가지 핵심적인 원칙을 머릿속에 넣어두어야 해요. Go는 타입 안전성(Type Safety)을 매우 중요하게 생각하는 언어예요. 즉, 한 번 정해진 변수의 타입은 함부로 바꿀 수 없다는 뜻이죠.
가장 먼저 이해해야 할 개념은 제로 값(Zero Value)이에요. Go에서는 변수를 선언할 때 값을 따로 할당하지 않아도, 각 자료형에 맞는 기본값이 자동으로 할당돼요. 예를 들어 정수는 0, 불리언은 false, 문자열은 빈 문자열(
실전 Go 변수와 상수 마스터하기
이제 이론을 넘어 실제 코드를 작성하는 단계로 들어가 볼게요. Go의 문법은 단순하지만, 그 안에 담긴 규칙은 매우 정교해요. 단계별로 차근차근 따라오세요.
STEP 1. 상황에 맞는 변수 선언법 익히기
Go에서 변수를 만드는 방법은 크게 두 가지예요. var를 사용하는 정석적인 방법과, :=를 사용하는 간편한 방법이죠. 이 둘을 구분해서 쓰는 것이 고수와 하수의 차이를 만든답니다.
먼저 var는 변수의 타입을 명확히 밝히고 싶을 때 사용해요. 특히 함수 밖에서 사용하는 전역 변수를 만들 때는 반드시 이 방식을 써야 해요. 반면에 :=는 함수 내부에서만 쓸 수 있는 지역 변수를 만들 때 정말 편리해요. 컴파일러가 오른쪽 값을 보고 타입을 알아서 판단해주거든요.
:= 연산자는 반드시 새로운 변수를 선언할 때만 쓸 수 있어요. 이미 있는 변수에 값을 다시 넣을 때는 사용할 수 없으니 주의하세요!
STEP 2. 데이터의 성격에 따른 자료형 선택하기
변수를 만들었다면, 그 안에 무엇을 담을지 결정해야 해요. Go는 자료형에 매우 엄격해서, 실수형 변수에 정수를 넣으려고 하면 바로 에러를 뱉어내요.
가장 자주 쓰는 자료형들은 다음과 같아요.
- 정수형 (int, int64 등): 숫자를 다룰 때 사용해요. 시스템 환경에 따라 크기가 달라지는 int보다는, 데이터 범위를 확실히 정할 수 있는 int64를 쓰는 것이 안전할 때가 많아요.
- 부동 소수점형 (float64): 소수점이 있는 숫자를 다뤄요. Go에서는 보통 float64를 기본으로 사용해요.
- 문자열 (string): 텍스트 데이터를 저장해요. 큰따옴표(“”)를 사용하며, 수정이 불가능한 불변(immutable) 특징이 있어요.
- 불리언 (bool): true 또는 false 값만 가질 수 있어요. 조건문에서 핵심 역할을 하죠.
이 자료형들을 선택할 때는 항상 메모리 효율과 데이터 범위를 고민해야 해요. 예를 들어 아주 큰 숫자를 다룬다면 반드시 int64를 사용해야 데이터가 넘치는(overflow) 사고를 막을 수 있어요.
STEP 3. 상수(const)로 코드의 안정성 확보하기
프로그램을 만들다 보면 프로그램 실행 내내 절대 변하지 않는 값들이 생겨요. 예를 들어 세율, API 주소, 최대 접속자 수 같은 것들이죠. 이런 값들을 일반 변수로 만들면 실수로 값이 바뀌었을 때 프로그램 전체가 꼬일 수 있어요.
이때 사용하는 것이 바로 const예요. 상수는 선언과 동시에 반드시 값을 할당해야 하며, 한 번 정해지면 프로그램이 끝날 때까지 수정할 수 없어요. 이렇게 하면 코드를 읽는 다른 개발자도 “아, 이 값은 절대 변하지 않는 중요한 기준이구나”라고 즉시 이해할 수 있죠.
STEP 4. 복합 자료형의 기초 맛보기
단순한 숫자나 글자만으로는 복잡한 데이터를 다루기 부족해요. 이때 사용하는 것이 배열(Array), 슬라이스(Slice), 맵(Map) 같은 복합 자료형이에요.
특히 Go에서 가장 많이 쓰이는 것은 슬라이스(Slice)예요. 배열은 크기가 고정되어 있어 불편하지만, 슬라이스는 크기가 자유롭게 늘어났다 줄어들었다 할 수 있어서 정말 유용해요. 목록 형태의 데이터를 다룰 때는 무조건 슬라이스를 먼저 떠올리세요.
STEP 5. 실전 적용 시나리오: 사용자 정보 관리하기
지금까지 배운 내용을 바탕으로, 실제 사용자 정보를 관리하는 작은 시나리오를 만들어 볼게요. 이 코드를 눈으로 따라가며 흐름을 이해해 보세요.
먼저 시스템 전체에서 공유되는 설정값(상수)을 정하고, 함수 내부에서 개별 사용자(변수)를 생성하는 흐름이에요.
실제 개발 환경에서는 변수 이름을 지을 때 camelCase(예: userName)를 사용하는 것이 관례예요.
시나리오 예시:
- 상수 선언:
const MaxAge = 120(사용자 최대 나이 설정) - 변수 선언:
var userName string = "홍길동"(사용자 이름) - 단축 선언:
userAge := 25(사용자 나이) - 상수 활용: 만약
userAge가MaxAge보다 크다면 에러 처리
이런 식으로 상수와 변수를 적절히 섞어서 쓰면, 데이터의 성격이 명확해지고 유지보수가 훨씬 쉬워진답니다.
자주 하는 실수와 해결법 + FAQ
자주 하는 실수와 해결법
Go를 배우는 과정에서 누구나 한 번쯤 겪게 되는 실수들을 모아봤어요. 이 패턴들만 피해 가도 에러의 절반은 줄일 수 있어요.
❌ 실수: 선언만 하고 사용하지 않는 변수 만들기
왜 발생하는가: Go 컴파일러는 메모리 낭비를 막기 위해 사용하지 않는 변수를 엄격히 금지해요.
✅ 해결법: 변수가 정말 필요한지 확인하거나, 테스트 중이라면 잠시 사용(예: fmt.Println)하여 컴파일러를 안심시켜 주세요.
❌ 실수: 상수(const)에 새로운 값 할당하기
왜 발생하는가: 상수의 정의 자체가 “변경 불가능한 값”이기 때문이에요.
✅ 해결법: 값이 변해야 하는 상황이라면 const 대신 var를 사용하세요.
❌ 실수: 타입이 다른 변수끼리 연산하기
왜 발생하는가: Go는 정수형과 실수형을 자동으로 변환해주지 않아요. (예: int + float64 불가능)
✅ 해결법: float64(myInt) + myFloat처럼 명시적으로 타입 변환(Type Casting)을 해주어야 해요.
❌ 실수: 짧은 선언(:=)을 함수 밖에서 사용하기
왜 발생하는가: := 연산자는 함수 내부의 지역 변수 생성을 위한 문법이에요.
✅ 해결법: 패키지 수준(전역) 변수를 만들 때는 반드시 var 키워드를 사용하세요.
❌ 실수: 제로 값(Zero Value)을 착각하기
왜 발생하는가: 초기화를 하지 않았을 때 들어가는 기본값을 인지하지 못해 논리 오류가 발생해요.
✅ 해결법: 변수를 선언한 직후, 의도한 값이 들어있는지 반드시 확인하는 습관을 들이세요.
자주 묻는 질문
Q. 변수 이름은 마음대로 지어도 되나요?
A. 문법적으로는 가능하지만, Go에서는 관례가 중요해요. 변수 이름은 짧고 명확하게 짓는 것이 좋으며, 대문자로 시작하면 외부 패키지에서 접근 가능하고 소문자로 시작하면 내부에서만 사용할 수 있는 규칙이 있어요.
Q. const에 계산식을 넣을 수 있나요?
A. 네, 가능해요. 하지만 컴파일 시간에 계산이 완료될 수 있는 상수 표현식이어야 해요. 예를 들어 const secondsInHour = 60 * 60은 괜찮지만, 실행 중에 값이 바뀌는 함수의 결과값은 상수에 넣을 수 없어요.
Q. int와 int64의 차이가 정확히 무엇인가요?
A. int는 실행되는 컴퓨터의 환경(32비트냐 64비트냐)에 따라 크기가 결정돼요. 반면 int64는 어떤 환경에서도 항상 64비트 크기를 유지하죠. 데이터의 크기가 중요하다면 int64를 쓰는 것이 훨씬 안전해요.
Q. 문자열(string)을 수정할 수 있나요?
A. 아니요, Go의 문자열은 불변(Immutable)이에요. 문자열의 일부를 바꾸고 싶다면 새로운 문자열을 생성하거나, 수정이 가능한 byte slice나 rune slice로 변환해서 작업해야 해요.
핵심 요약과 다음 단계로의 도약
오늘 배운 내용을 잊지 않도록 마지막으로 정리해 볼게요. 이 내용만 기억해도 Go 변수와 상수의 기초는 마스터한 것이나 다름없어요.
- 변수는 var(전역/명시적)와 :=(지역/간편)로 나뉘어요.
- 모든 변수는 선언 시 초기화하지 않으면 제로 값을 가져요.
- 상수(const)는 절대 변하지 않는 값을 안전하게 보호해요.
- 타입이 다른 변수 간의 연산은 반드시 명시적 타입 변환이 필요해요.
- 사용하지 않는 변수는 컴파일 에러를 발생시키니 주의하세요.
이제 기초를 닦았으니 다음 단계로 나아갈 차례예요. 오늘 바로 실천해 볼 수 있는 할 일들을 제안해 드릴게요.
- 오늘 할 일: Go 개발 환경을 설치하고, 직접 변수 5개를 선언해서 출력해 보세요.
- 이번 주 할 일: 다양한 자료형(int, float, string, bool)을 섞어서 간단한 계산기 코드를 짜보세요.
- 실행 직전 할 일: 에러 메시지가 나왔을 때 당황하지 말고, 어떤 타입이 맞지 않는지 읽어보는 습관을 가지세요.
Go 프로그래밍의 세계는 무궁무진해요. 변수와 상수를 완벽히 다루게 된 여러분은 이제 훨씬 더 복잡한 로직을 설계할 준비가 되었답니다. 공부하다가 막히는 부분이 있다면 언제든 댓글로 남겨 주세요. 여러분의 성장을 진심으로 응원할게요!
함께 읽으면 좋은 글: Go 변수와 상수 완전 정복 가이드