[Go언어] 변수와 자료형
안녕하세요! 오늘은 Go언어의 변수와 자료형에 대해서 알아보도록 합시다!
Go언어에 대한 체험은 tour.golang.org 공식 사이트에서 확인할 수 있습니다.
<Go언어를 쉽게 체험해 볼 수 있는 GO TOUR>
사실 저 강의만 한번 따라해봐도 Go언어에 대해서 이해하실 수 있을 겁니다만, 저의 강의에서는 조금 더 자세하게, 그리고 다양한 예시들을 소개해 드리려고 합니다.
그럼, 시작하겠습니다!
처음 만나는 Golang
모든 프로그래밍 언어에 대한 배움은 "Hello World!"를 출력하는 것에서 시작됩니다. Go언어도 예외는 없습니다.
그러면 hello.go 파일을 만들어서 다음과 같은 코드를 입력하죠!
1 2 3 4 5 6 7 | package main import "fmt" func main() { fmt.Println("Hello World!") } | cs |
Go언어 파일을 실행시키는 명령어는 터미널 (혹은 CMD) 창에서
1 | go run <파일 이름> | cs |
을 실행시키면 됩니다.
터미널 창에서 "Hello World!"가 출력되는걸 확인하셨나요?
그러면 Go언어 소스코드의 구조에 대해서 간단하게 살펴 보도록 하죠.
Go언어는 요즘 언어의 트렌드 답게 코드 끝에 세미콜론(;)을 찍어주지 않아도 됩니다.
- package main : main 패키지를 사용한다고 선언합니다. C++의 using namespace std와 비슷한 개념이라고 생각하시면 될것 같습니다.
- import "fmt" : Println 등의 함수가 정의되어 있는 fmt 패키지를 불러옵니다. C언어의 #include <stdio.h>와 비슷한 개념이라고 생각하시면 됩니다.
- func main() : main 함수입니다. C언어의 main과 동일한 개념입니다. 모든 프로그램에서 제일 먼저 실행되는 함수입니다.
- fmt.Println() : fmt 패키지에서 Println()이라는 함수로 "Hello World!"를 출력해 줍니다.
변수와 자료형
변수의 선언
Go언어에서 변수는 다음과 같이 선언합니다!
1 2 3 4 5 6 7 8 9 | package main import "fmt" func main() { var a int var b, c, d string var e bool } | cs |
Go언어에서는 var로 변수를 선언한다고 명시하고, 변수의 이름을 지정하고 맨 뒤에 변수의 타입, 즉 자료형을 명시하게 됩니다.
다른 언어를 사용해보신 분들은 '왜 이렇게 복잡하게 변수를 선언해?'라는 의문을 가지실 수도 있습니다.
하지만 이와 같은 변수 선언 방식으로 왼쪽에서부터 문장을 읽듯이 읽어 봤을 때,
"변수 a를 int 타입으로 선언한다"
와 같이 읽음으로써 코드의 가독성을 높여주는 역할을 해줘서 오히려 편리합니다!
변수의 초기화
선언과 초기화의 차이는 무엇일까요?
선언은 내가 '어떤 변수를 어떤 타입으로 만들겠다!'라고 알려 주는 것이고, 초기화는 '어떤 변수의 값을 어떤 값으로 초기 설정하겠다'라는 의미입니다.
예시를 통해서 확인해 보죠.
1 2 3 4 5 6 7 8 | package main import "fmt" func main() { var a int // a라는 변수를 int 타입으로 선언합니다. var b int = 1 // b라는 변수를 int 타입으로 선언하고 1로 초기화합니다. } | cs |
다음과 같이 활용될 수 있습니다.
변수의 선언과 초기화는 하나의 변수에 대해서만 가능한 것이 아니라, 콤마(,)로 구분된 변수들에 대해서 한번에 초기화 및 선언할 수 있습니다.
1 2 3 4 5 6 7 | package main import "fmt" func main() { var a, b, c int = 1, 2, 3 // 이런 식으로 말이죠! } | cs |
그러면 이제 선언 및 초기화된 변수의 값을 확인해 봅시다!
일단 위의 코드를 "go run" 명령어를 통해 실행해 보면 에러가 발생합니다.
imported and not used: "fmt"
그것은 바로 import한 패키지와 선언한 변수들을 사용하지 않아서 발생하는 오류입니다.
Go언어에서는 최적화를 위해 사용하지 않은 변수들을 알려주는 기능을 갖추고 있습니다.
이제 다음과 같이 fmt 패키지와 변수들을 사용해 주면 오류가 없어집니다.
1 2 3 4 5 6 7 8 9 | package main import "fmt" func main() { var a, b, c int = 1, 2, 3 fmt.Println(a, b, c) } | cs |
go run main.go를 통해 확인해 보면,
1 2 3
이 출력되는걸 확인하실 수 있을 겁니다.
함수를 선언하고 초기화하는 방법에는 Go언어만의 특별한 문법이 있습니다.
다음 코드를 확인해 보죠.
1 2 3 4 5 6 7 | package main import "fmt" func main() { a, b, c := 1, "Hello!", true } | cs |
Go언어에서는 ":="이라는 연산자를 통해서 명시적인 타입을 적지 않고 변수를 선언 및 초기화 할 수 있는 방법을 제시하고 있습니다.
처음에는 특이한 문법이라고 생각했는데, 사용하다보면 정말 편리합니다!
상수 선언
Go언어의 상수 선언은 const를 사용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package main import "fmt" const ( d = "이렇게 하면" e = 'A' f = "여러개의 상수를 동시에 선언할 수 있습니다." g = true ) // 상수는 선언 후 사용하지 않아도 unused 에러가 발생하지 않습니다. func main() { const a = "Hello World!" const b = 123 const c = 3.14 fmt.Println(a) } | cs |
Go언어의 상수는 문자(character), 문자열(string), 참거짓(boolean), 숫자 중 하나가 될 수 있습니다.
자료형
Go언어의 자료형 입니다.
자료형 |
저장범위 |
설명 |
uint8 |
0 ~ 255 |
부호 없는 8비트 정수형 |
uint16 |
0 ~ 65,535 |
부호 없는 16비트 정수형 |
uint32 |
0 ~ 4,294,967,295 |
부호 없는 32비트 정수형 |
uint64 |
0 ~ 18,446,744,073,709,551,615 |
부호 없는 64비트 정수형 |
uint |
|
32비트 시스템에서는 uint32, 64비트에서는 uint64 |
int8 |
-128 ~ 127 |
부호 있는 8비트 정수형 |
int16 |
-32,768 ~ 32,767 |
부호 있는 16비트 정수형 |
int32 |
~2,147,483,648 ~ 2,147,483,647 |
부호 있는 32비트 정수형 |
int64 |
~9,233,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
부호 있는 64비트 정수형 |
int |
|
32비트 시스템에서는 int32, 64비트 시스템에서는 int64 |
float32 |
|
IEEE-754 32비트 부동소수점, 7자리 정밀도 |
float64 |
|
IEEE-754 64비트 부동소수점, 12자리 정밀도 |
complex64 |
|
float32 크기의 실수부와 허수부로 구성된 복소수 |
complex128 |
|
float64 크기의 실수부와 허수부로 구성된 복소수 |
uintptr |
|
uint와 같은 크기를 갖는 포인터형 |
bool |
|
참, 거짓을 표현하기 위한 8비트 자료형 |
byte |
|
8비트 자료형 |
rune |
|
유니코드 저장을 위한 자료형, 크기는 int32와 동일 |
string |
|
문자열 저장을 위한 자료형 |
사실 위의 표의 세부적인 내용을 잘 모르셔두 됩니다!
다만! 이런 종류의 자료형이 있구나~ 정도만 알아두시면 됩니다.
Go언어는 특이하게도 허수를 표현할 수 있는 자료형이 있습니다.
complex 자료형은 우리가 수학 시간에 사용하는 것처럼 숫자 + i의 꼴로 나타낼 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 | package main import "fmt" var z complex128 = 10 + 1i // 위와 같은 방식으로 허수를 표현합니다! // i는 그냥 적으면 변수 i로 인식되기 때문에 1을 꼭 붙여 주어야 합니다! func main() { fmt.Println(z) } | cs |
아니 허수도 사용할 수 있다니!! 정말 놀랍죠!!
결론
오늘은 Go언어의 변수와 자료형에 대해서 살펴 보았습니다!
새로운 Go언어의 세계, 어떠셨나요?
다음에는 Go언어의 반복문에 대해서 살펴보도록 하겠습니다!