Web/Go Lang

[Go언어] 변수와 자료형

JuniorEinstein 2018. 4. 26. 14:24
728x90


안녕하세요! 오늘은 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언어는 요즘 언어의 트렌드 답게 코드 끝에 세미콜론(;)을 찍어주지 않아도 됩니다.


  1. package main : main 패키지를 사용한다고 선언합니다. C++의 using namespace std와 비슷한 개념이라고 생각하시면 될것 같습니다.
  2. import "fmt" : Println 등의 함수가 정의되어 있는 fmt 패키지를 불러옵니다. C언어의 #include <stdio.h>와 비슷한 개념이라고 생각하시면 됩니다.
  3. func main() : main 함수입니다. C언어의 main과 동일한 개념입니다. 모든 프로그램에서 제일 먼저 실행되는 함수입니다.
  4. fmt.Println() : fmt 패키지에서 Println()이라는 함수로 "Hello World!"를 출력해 줍니다.

어떤가요! 좀 와 닿나요?

사실 Go언어의 문법은 배우기 쉽기로 유명하오나, 프로그래밍을 처음 접하는 사람들에게는 다소 어려운 개념이 될 수도 있습니다. (특히 뒤에 채널이랑 포인터의 개념은 더욱...)

그래도 여러번 따라해 보고, 다양한 소스코드를 짜면서 실력을 향상 시킬 수 있을 겁니다!
일단은 한 발 더 나아가보도록 하죠!

변수와 자료형

다음으로 배우게 될 내용은 Go언어의 변수와 자료형입니다.

변수는 무엇일까요?

변수는 말 그대로 "변할 수 있는 수"를 의미합니다. 이 숫자도 들어갔다가, 저 숫자도 들어갈 수 있는 그런 수이죠.

컴퓨터에서의 변수는 숫자 뿐만이 아니라 문자, 함수, 문자열 등 다양한 값들이 들어갈 수 있습니다.

자료형변수가 취할 수 있는 값의 형태입니다.

정수, 실수, 문자, 문자열, 참거짓 등이 이에 해당합니다.

자세히 알아보죠!

변수의 선언

변수는 영어로 variable이라고 표현합니다.

Go언어에서는 이를 줄여서 var라는 표현으로써 변수를 선언할 수 있습니다.


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 = 123 // 이런 식으로 말이죠!
}
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 = 123
 
    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언어의 반복문에 대해서 살펴보도록 하겠습니다!




728x90