자료형
자료형의 종류와 특징을 알아보자.
자료형이란
메모리 공간 할당에 앞서 할당된 메모리에 정수를 저장할 것인지, 실수를 저장할 것인지 결정되어야합니다. 또한, 정수를 저장한다면 몇 바이트의 크기를 사용할 것인지도 정한 후에 할당하는 것이 좋습니다. 이렇게 어떤 데이터를 저장할 지 표현하는 것이 '자료형'
입니다.
Go언어에서 쓸 수 있는 자료형은 부울린(bool) 타입, 문자열 타입, 정수형 타입, 실수 타입, 복소수 타입 그리고 기타 타입
들이 있습니다. Go언어의 특징으로는 ':=' 용법
을 활용한 자료형 추론이 가능합니다.
unsafe 라이브러리
Go언어에서도 자료형의 크기를 알 수 있는 sizeof 함수
를 사용할 수 있습니다. 우선 코드 상단에 import "unsafe"
를 입력하면 "unsafe.Sizeof(변수)"
형태를 사용하여 선언한 자료형의 size를 알 수 있습니다.
Boolean 타입
다른 언어에서는 0과 1혹은 0과 다른 숫자로 표현하여 거짓과 참을 표현할 수 있지만 Go언어에서는 오로지 'true'와 'false'
만 사용하여 할당할 수 있습니다. 그리고 부울린 타입은 1바이트로 할당됩니다.
정수 타입
정수 자료형에서 눈에 띄는 자료형은 uintptr인데 이는 포인터의 비트 패턴을 할당할만한 크기의 자료형입니다. 주로 포인터의 주소를 할당할 때 사용합니다.
Go언어에서는 한눈에 자료형의 크기를 확인할 수 있게 int16, int 32와 같은 형태로 표현합니다. 그리고 앞에 “un”이 붙은 자료형은 C언어와 다른 언어들에서 쓰이는 0과 양의 정수만 표현하는 'unsigned'
와 같습니다.
int와 uint는 최소 4바이트 크기의 데이터 타입입니다. 이는 32비트 시스템에서는 4바이트(32비트) , 64비트 시스템에서는 8바이트(64비트)입니다.
실수 및 복소수 타입
이 자료형의 중요한 선택 요소는 '정밀도'
입니다. 표를 확인하고 적절한 자료형을 사용합시다. 복소수 선언은 3+4i
처럼 선언할 수 있습니다.
문자열 타입
문자열 타입은 ““와 같이 비어있을 수 있고, 다른 언어에서 표현되는 null과 같이 Go언어에서 사용되는 nil이 아닐 수 있습니다. string으로 선언한 문자열 타입은 immutable 타입
으로서 값을 수정할 수 없습니다.
예를 들어, var str string = "hello"와 같이 선언하고 str[2] = 'a'로 수정이 불가능
합니다
Go언어에서는 문자열을 표현하는 데 두 가지 방법이 있습니다.
- 첫 번째는
Back Quote(
문자열)
을 이용한 방법입니다. Back Quote로 둘러 싸인 문자열은Raw String Literal
이라고 부릅니다. 쉽게 말하자면, 이 안에 있는 문자열은 어느 기호든 문자열 자체로 인식되는Raw String 값
이라는 것입니다.
예를 들어, 개발자라면 익숙하게 알고 있는 이스케이프 시퀀스가 특별한 의미로 인식되지 않는다는 것입니다. - 두 번째는
이중인용부호("문자열")
를 이용한 방법입니다. 이중인용부호로 둘러싸인 문자열은Interpreterd String literal
이라고 부릅니다.
기타 타입
기타 타입은 byte와 rune 자료형이 있습니다. byte는 uint8과 똑같은 자료형이라고 생각할 수 있습니다. 바이트 값을 8비트 부호없는 정수 값과 구별하는 데 사용됩니다. 그리고 rune은 int32와 똑같은 자료형이라고 볼 수 있습니다. 관례상 문자 값을 정수 값과 구별하기 위해 사용합니다.
자료형의 변환
데이터의 표현방식을 바꾸는 것이 바로 '자료형의 변환'
입니다. 즉, 자료형의 변환이라는 것은 데이터의 표현방식을 바꾸는 것입니다. 이러한 자료형의 변환은 다른 언어들을 비추어 보았을 때 크게 두 종류가 있습니다.
자동 형 변환(묵시적 형 변환)
강제 형 변환(명시적 형 변환)
Go언어에서는 형 변환을 할 때 변환을 명시적으로 지정
해주어야합니다.
예를 들어 float32에서 uint로 변환할 때, 암묵적 변환은 일어나지 않으므로 “uint(변수이름)”과 같이 반드시 변환을 지정
해줘야합니다. 만약 명시적인 지정이 없다면 런타임 에러가 발생합니다.