Computer_Language/GO

[Go] 4. Go(golang)의 자료형과 변수 선언

Joo-Topia 2019. 9. 11. 13:43

프로그래밍을 위해서 입, 출력만큼 중요한 "변수"라는 개념이 있다.

변수란 입력된 데이터들을 처리하여 결과를 출력하는 과정에서 입력된 데이터들을 저장하거나, 계산 결과를 저장하기 위해 이름이 할당된 메모리 공간이다.

모든 컴퓨터 언어에서는 자료형 마다 할당되는 메모리 공간의 크기가 다르다.

오늘은 Go의 자료형과 변수에 대해서 정리를 해보려고 한다.

 

변수의 선언 방법


가장 기본적인 자료형인 "int"를 기준으로 정리했다.

package main

import "fmt"

func main() {
    var num int
    num = 3
    fmt.Printf("현재 num의 값은 %d 입니다.\n", num)
}

결과

Go의 변수 선언 방법 중 가장 기본적인 방법이다.

C언어와 다른점은 사람이 코드를 읽을 때 조금 더 익숙(?)한 표현을 사용했다는 점이다.

int a      ->  int형의 변수 a가 있다.

var a int   ->  변수 a 는 int형이다.

 

C언어와 다른 점이 하나 더 있는데, 자동으로 Zero value로 설정되는 것이다.

package main

import "fmt"

func main() {
    var num int
    fmt.Printf("초기화 하지 않은 num의 값은 %d 입니다.\n", num)
}

결과

쓰레기 값에 대한 걱정을 하지 않아도 된다는 점에서 참 편리한 것 같다.

 

 

Go의 변수를 선언하는 방법은 한 가지가 더 있다.

package main

import "fmt"

func main() {
    num := 3
    fmt.Printf("num의 값은 %d 입니다.\n", num)
    str := "apple"
    fmt.Printf("str의 값은 %s 입니다.\n", str)
}

결과

'Sort Assignment Statement'라고 불리는 ':='를 사용하면 별다른 형 선언 없이 타입 추론이 가능하다.

지역 변수를 선언할 때만 사용 가능하다고 한다. (전역 변수는 무조건 var형식으로 선언)

 

 

 

Go의 자료형


Go의 자료형은 Boolean, 정수, 실수, 복소수, 문자열, 기타(byte, rune) 타입이 있다.

각 자료형의 크기(Byte)는 "unsafe"모듈을 import 한 뒤 "unsafe.Sizeof(변수)"로 확인 가능하다.

각 자료형 별로 특징을 정리한 테이블은 "구름 Edu의 바로 실행해보면서 배우는 Go Lang" 강의를 참고했다.

 

  • Boolean 
자료형 선언 크기(byte)
부울린 bool 1

 오직 "true"와 "false"만 사용 가능하다. 1, 0과 같은 정수 값은 안된다.

 

  • 정수
자료형 선언 크기(byte)

정수형(음수 포함)

int n비트 시스템에서 n비트
int8 1
int16 2
int32 4
int64 8

정수형(0, 양수)

uint n비트 시스템에서 n비트
uint8 1
uint16 2
uint32 4
uint64 8
uintptr 8

uintptr은 포인터의 주소를 할당할 때 사용한다고 한다. 하지만 아직까지 한 번도 써본 적이 없다.

 

  • 실수 및 복소수
자료형 선언 크기(byte)

실수

float32 4
float64 8

복소수

complex64 8
complex128 16

C++에서 복소수를 표현하기 위해 Class를 만든 적이 있었는데, Go는 참 편리한 것 같다.

실제로 "1+2i" 형식으로 선언 가능하다.

 

  • 문자열 타입
자료형 선언 크기(byte)
문자열 string 16

string으로 설정한 문자열은 immutable 타입으로 값을 수정할 수 없다.

 

  • 기타 타입
자료형 선언 크기(byte)
정수(0, 양수) byte 1
정수 rune 4

byte는 uint8과 똑같은 자료형, rune은 int32와 똑같은 자료형이라고 한다.

헥사 데이터를 표현할 때 쓰는 것 같다. (아직 써본 적은 없다.)

 


말로 예쁘게 정리를 잘 못해서 강의의 내용을 그대로 쓰는 것 같다..

그래도 이런 식으로 정리를 해야 기억이 남으니 계속해야겠다.

오늘 공부 끝!

 

*구름 edu의 바로 실행해보면서 배우는 Go Lang"을 수강 후 정리한 내용입니다.
소스코드는 깃허브 저장소를 참고!