[IT-방법] Go 자료형 빠른 시작을 위한 핵심 가이드 – 입문 개발자가 반드시 알아야 할 기본 자료형과 실전 예제 정리

기본 자료형 개념을 시각화한 Go 프로그래밍 일러스트

코드를 작성하자마자 만나는 오류, 자료형 때문일까요?

새로운 프로그래밍 언어를 배우기 시작하면 의욕이 넘쳐서 일단 코드부터 써 내려가기 마련이에요. 그런데 Go 언어로 코딩을 하다 보면 갑자기 빨간 줄이 뜨거나, 컴파일 단계에서 예상치 못한 오류 메시지를 마주하게 돼요. 분명히 숫자를 더하려고 했는데 “타입이 맞지 않는다”는 메시지가 나오면 당황스러울 수밖에 없어요.

이런 현상은 Go 언어가 매우 엄격한 정적 타입 언어(Statically Typed Language)이기 때문에 발생하는 자연스러운 과정이에요. 변수를 만들 때 그 안에 담길 데이터가 무엇인지 미리 명확하게 정의해야 하거든요. 타입을 제대로 이해하지 못한 상태에서 코드를 짜면, 나중에 데이터가 커지거나 형태가 바뀔 때 프로그램이 예기치 않게 멈춰버리는 큰 문제를 겪게 돼요.

지금 이 글을 읽고 계신 분들은 아마 Go를 처음 접하면서 데이터가 메모리에 어떻게 저장되는지, 왜 이렇게 까다롭게 타입을 따지는지 궁금하실 거예요. 단순히 문법을 외우는 것을 넘어, 자료형의 원리를 이해하면 훨씬 안정적이고 성능 좋은 프로그램을 만들 수 있어요. 이 가이드는 여러분이 겪을 시행착오를 줄여드리기 위해 준비했어요.

오늘 함께 살펴볼 내용은 다음과 같아요.

  • 데이터의 기본 단위가 되는 기본 자료형의 종류와 특징
  • 실제 개발에서 자주 쓰이는 복합 자료형의 활용법
  • 자료형 선택 시 흔히 하는 실수와 이를 피하는 방법
  • 효율적인 데이터 처리를 위한 타입 변환 노하우

본격적인 코딩 전, 반드시 챙겨야 할 준비물

Go 자료형을 제대로 다루기 위해서는 단순히 문법을 암기하는 것보다, Go가 데이터를 바라보는 관점을 먼저 이해하는 것이 중요해요. Go는 메모리를 효율적으로 사용하기 위해 각 데이터의 크기를 엄격하게 관리해요. 따라서 무작정 모든 숫자를 큰 자료형으로 만드는 것은 오히려 메모리 낭비를 초래할 수 있어요.

개발을 시작하기 전에 여러분의 환경이 준비되었는지 확인해 보세요. Go 언어가 설치된 환경이라면 바로 실습이 가능하지만, 어떤 자료형을 선택할지 결정하는 기준은 머릿속에 미리 정리해 두는 것이 좋아요. 적절한 자료형의 선택은 프로그램의 성능과 직결된다는 점을 꼭 기억해 주세요.

자료형 선택을 위한 기준 비교

상황에 따라 어떤 타입을 써야 할지 고민될 때 아래 표를 참고하면 판단을 내리는 데 도움이 돼요.

상황 및 목적 추천 자료형 이유와 특징
일반적인 정수 계산 int 시스템 아키텍처에 맞춰 최적의 크기로 자동 설정돼요.
정밀한 소수점 계산 float64 정밀도가 높아 오차를 줄이는 데 유리해요.
텍스트 데이터 처리 string UTF-8 인코딩을 기본으로 사용하여 전 세계 언어를 지원해요.
참/거짓 상태 관리 bool 메모리를 최소한으로 사용하며 논리 연산에 최적화되어 있어요.

위 표에서 보듯, 무조건 크다고 좋은 것이 아니에요. 데이터의 범위와 용도를 먼저 파악하는 습관을 들이는 것이 핵심이에요. 예를 들어, 사용자 나이를 저장할 때 굳이 64비트 정수를 쓸 필요는 없지만, 일반적인 경우에는 시스템 최적화를 위해 int를 기본으로 사용하는 것이 가장 안전한 선택이에요.

💡 알아두기
Go에서 자료형을 선언할 때는 `var name int = 10`처럼 명시할 수도 있고, `name := 10`처럼 타입을 생략하여 추론하게 할 수도 있어요. 하지만 복잡한 로직에서는 타입을 명시하는 것이 가독성에 더 좋아요.

Go 자료형 빠른 시작을 위한 단계별 실전 구현

이제 이론을 넘어 실제 코드로 어떻게 자료형을 사용하는지 자세히 살펴볼게요. 단계별로 차근차근 따라오시면 복잡해 보이던 자료형들이 명확하게 정리될 거예요.

STEP 1. 기본 숫자 자료형 마스터하기

가장 먼저 만나는 것은 숫자 데이터예요. Go는 정수와 실수를 아주 명확하게 구분해요. 정수는 소수점이 없는 값을, 실수는 소수점이 있는 값을 의미하죠.

정수형은 `int8`, `int16`, `int32`, `int64`처럼 크기를 지정할 수 있어요. 숫자가 작다면 작은 타입을 써서 메모리를 아끼고, 아주 큰 숫자를 다뤄야 한다면 `int64`를 선택해야 해요. 만약 범위를 벗어나는 숫자를 넣으면 오버플로(Overflow) 현상이 발생해 엉뚱한 값이 나올 수 있으니 주의해야 해요.

실수형은 주로 `float32`와 `float64`를 사용해요. 현대적인 컴퓨팅 환경에서는 정밀도가 높은 float64를 기본으로 사용하는 것을 권장해요. 금융권 시스템처럼 극도로 정밀한 계산이 필요한 경우가 아니라면, `float64`를 쓰는 것이 계산 오차를 최소화하는 가장 쉬운 방법이에요.

STEP 2. 텍스트와 논리 데이터 다루기

문자열은 `string` 타입을 사용해요. Go의 문자열은 UTF-8 인코딩을 따르기 때문에 한글과 같은 다국어도 문제없이 처리할 수 있어요. 하지만 주의할 점이 있어요. 문자열의 길이를 잴 때 글자 수가 아니라 바이트(byte) 수를 기준으로 계산되는 경우가 많거든요. 한글 한 글자는 보통 3바이트를 차지한다는 사실을 꼭 기억해 두세요.

참과 거짓을 나타내는 `bool` 타입은 매우 단순하지만 강력해요. 조건문에서 프로그램의 흐름을 제어할 때 핵심적인 역할을 수행하죠. `true`와 `false` 두 가지 값만 가질 수 있어요.

STEP 3. 데이터를 묶어서 관리하는 슬라이스와 배열

데이터가 하나가 아니라 여러 개라면 어떻게 해야 할까요? 이때 사용하는 것이 배열과 슬라이스예요. 많은 초보자가 이 둘을 헷갈려 하지만, Go에서는 슬라이스(Slice)를 훨씬 더 자주 사용해요.

배열은 생성할 때 크기가 고정되어 있어서 나중에 요소를 추가할 수 없어요. 반면 슬라이스는 크기가 자유롭게 변하는 가변적인 특징을 가지고 있죠. 실제 개발 환경에서는 데이터의 개수가 유동적인 경우가 많기 때문에 대부분의 상황에서 슬라이스를 사용하게 될 거예요. 슬라이스를 사용할 때는 내부적으로 배열(Array)을 참조하고 있다는 점을 이해하면 나중에 성능 최적화를 할 때 큰 도움이 돼요.

⚠️ 주의
슬라이스의 길이를 늘리기 위해 `append` 함수를 계속 사용하다 보면, 내부 배열의 용량이 꽉 차서 새로운 메모리 공간을 할당하게 돼요. 이 과정에서 성능 저하가 발생할 수 있으니 대략적인 데이터 크기를 안다면 미리 용량을 확보해 두는 것이 좋아요.

STEP 4. 키-값 쌍의 마법, 맵(Map) 활용하기

사전처럼 특정 키를 통해 값을 빠르게 찾고 싶을 때는 `map` 자료형을 사용해요. 예를 들어, 학생의 이름(Key)을 넣으면 점수(Value)가 나오는 구조를 만들 수 있죠. 맵은 매우 편리하지만 한 가지 특징이 있어요. 데이터를 넣은 순서가 보장되지 않는다는 점이에요. 순서가 중요한 데이터를 다룰 때는 맵 대신 슬라이스를 고려해야 해요.

STEP 5. 복잡한 데이터를 설계하는 구조체(Struct)

실제 프로그램은 단순한 값들의 모음이 아니에요. ‘사용자’라는 개념을 만들려면 이름, 나이, 이메일 같은 여러 정보가 묶여 있어야 하죠. 이때 사용하는 것이 구조체(Struct)예요. 구조체는 서로 다른 자료형을 하나의 이름 아래 묶어주는 설계도 역할을 해요. 객체 지향 프로그래밍의 기초가 되는 아주 중요한 개념이에요.

실전 데이터 구조 설계 시나리오

간단한 게임 캐릭터 정보를 설계한다고 가정해 볼게요. 아래와 같은 구조로 데이터를 구성할 수 있어요.

  • 캐릭터 이름: `string`
  • 레벨: `int`
  • 체력(HP): `float64`
  • 아이템 목록: `[]string` (문자열 슬라이스)
  • 상태(활성화 여부): `bool`

이렇게 구조체를 정의하면 복잡한 데이터도 마치 하나의 단위처럼 깔끔하게 관리할 수 있어요.

자주 하는 실수와 해결법 및 궁금한 점

실전에서 개발자들이 가장 많이 겪는 오류들을 정리했어요. 이 부분만 잘 숙지해도 디버깅 시간을 절반 이상 줄일 수 있어요.

자주 하는 실수와 해결법

정수와 실수 간의 직접 계산
왜 발생하는가: Go는 `int`와 `float64`를 엄격히 구분하기 때문에, 두 타입을 섞어서 계산하려고 하면 컴파일 에러가 발생해요.
해결법: 한쪽 타입을 명시적으로 변환해 주세요. 예: `float64(myInt) + myFloat`

슬라이스 범위 초과 접근
왜 발생하는가: 선언된 슬라이스의 인덱스 범위를 벗어난 위치의 값을 읽으려고 할 때 프로그램이 즉시 종료돼요.
해결법: 접근하기 전에 반드시 `len(slice)`를 사용하여 인덱스가 유효한지 확인하는 습관을 가지세요.

맵(Map)에 데이터 넣기 전 초기화 누락
왜 발생하는가: 선언만 하고 초기화하지 않은 맵에 값을 넣으려고 하면 패닉(Panic)이 발생해요.
해결법: `make(map[string]int)` 함수를 사용하여 맵을 반드시 초기화한 후 사용하세요.

0으로 나누기 연산
왜 발생하는가: 정수나 실수 연산 중 나누는 수(분모)가 0이 되면 런타임 에러가 발생해요.
해결법: 나누기 연산을 수행하기 전, 분모가 0이 아닌지 체크하는 조건문을 추가하세요.

포인터의 잘못된 사용
왜 발생하는가: 초기화되지 않은 포인터를 참조(Dereference)하려고 하면 메모리 오류가 발생해요.
해결법: 포인터 변수가 `nil`인지 항상 확인하거나, 안전하게 변수를 생성하세요.

자주 묻는 질문

Q. Go에서 자료형 변환은 왜 이렇게 까다로운가요?

Go는 프로그램의 예측 가능성과 성능을 최우선으로 하기 때문이에요. 타입이 명확하면 컴파일러가 실행 전에 오류를 잡아낼 수 있고, 메모리 사용량도 최적화할 수 있어요. 번거로워 보일 수 있지만, 대규모 시스템에서는 매우 강력한 안전장치가 돼요.

Q. `int`와 `int64`는 무엇이 다른가요?

int는 실행되는 컴퓨터의 환경(32비트 또는 64비트)에 따라 크기가 달라져요. 반면 int64는 어떤 환경에서도 항상 64비트 크기를 유지해요. 데이터의 크기가 매우 중요하다면 int64를 쓰는 것이 안전해요.

Q. 슬라이스가 배열보다 좋은 점이 구체적으로 뭔가요?

슬라이스는 크기를 동적으로 조절할 수 있고, 함수에 전달할 때 데이터 전체를 복사하지 않고 참조만 전달하기 때문에 메모리 효율성이 훨씬 뛰어나요. 그래서 Go 개발의 90% 이상은 슬라이스를 사용한다고 봐도 무방해요.

Q. 문자열의 길이를 구할 때 왜 한글은 숫자가 크게 나오나요?

Go의 `len()` 함수는 글자 수가 아니라 저장된 바이트 수를 반환해요. 한글은 UTF-8에서 한 글자당 3바이트를 사용하기 때문에 글자 수보다 큰 값이 나오는 것이 정상이에요. 정확한 글자 수를 세려면 `unicode/utf8` 패키지를 사용해야 해요.

성공적인 Go 개발을 위한 마지막 체크리스트

오늘 배운 내용을 바탕으로 여러분의 코드가 더 단단해지길 바라요. 자료형은 단순히 데이터를 담는 그릇이 아니라, 프로그램의 안정성을 결정짓는 기초 공사와 같아요. 기초가 튼튼해야 그 위에 더 복잡하고 멋진 기능을 쌓아 올릴 수 있어요.

✅ 핵심 요약

  • 정수 연산에는 시스템에 최적화된 int를 기본으로 사용하세요.
  • 소수점 정밀도가 중요하다면 float64를 선택하세요.
  • 가변적인 데이터 목록은 array 대신 slice를 활용하세요.
  • 복합 데이터를 구조화할 때는 struct를 적극적으로 설계하세요.
  • 타입 간 계산 시에는 반드시 명시적으로 형 변환을 해주세요.
  • 맵(Map)을 사용할 때는 사용 전 반드시 make로 초기화하세요.

오늘 배운 내용을 실제 프로젝트에 바로 적용해 보는 것은 어떨까요? 처음에는 타입 변환이 번거롭게 느껴질 수 있지만, 익숙해지면 이보다 든든한 지원군도 없다는 걸 깨닫게 될 거예요.

앞으로의 학습 단계

오늘의 학습을 마쳤다면, 다음 단계로 넘어가 보세요.

  • 오늘 할 일: Go 설치 환경에서 정수와 실수 변수를 선언하고 서로 더하는 코드를 직접 작성해 보세요.
  • 이번 주 할 일: 구조체(Struct)를 만들어 자신만의 간단한 프로필 데이터를 관리해 보세요.
  • 실행 직전 할 일: 슬라이스의 append 함수를 사용해 데이터 목록을 동적으로 늘려보며 메모리 변화를 관찰해 보세요.

자료형에 대한 더 깊고 상세한 이야기가 궁금하다면 Go 자료형 완전 정복 가이드 글을 함께 읽어보시는 것을 추천드려요. 다음 편에서는 더욱 강력한 Go의 기능을 다룰 예정이니, 놓치지 않도록 구독해 주세요!

댓글 남기기