자료형

자료형

자료형의 종류와 특징을 알아보자.


자료형이란


메모리 공간 할당에 앞서 할당된 메모리에 정수를 저장할 것인지, 실수를 저장할 것인지 결정되어야합니다. 또한, 정수를 저장한다면 몇 바이트의 크기를 사용할 것인지도 정한 후에 할당하는 것이 좋습니다. 이렇게 어떤 데이터를 저장할 지 표현하는 것이 '자료형'입니다.
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언어에서는 문자열을 표현하는 데 두 가지 방법이 있습니다.

  1. 첫 번째는 Back Quote(문자열)을 이용한 방법입니다. Back Quote로 둘러 싸인 문자열은 Raw String Literal이라고 부릅니다. 쉽게 말하자면, 이 안에 있는 문자열은 어느 기호든 문자열 자체로 인식되는 Raw String 값이라는 것입니다.
    예를 들어, 개발자라면 익숙하게 알고 있는 이스케이프 시퀀스가 특별한 의미로 인식되지 않는다는 것입니다.
  2. 두 번째는 이중인용부호("문자열")를 이용한 방법입니다. 이중인용부호로 둘러싸인 문자열은 Interpreterd String literal이라고 부릅니다.

기타 타입


기타 타입은 byte와 rune 자료형이 있습니다. byte는 uint8과 똑같은 자료형이라고 생각할 수 있습니다. 바이트 값을 8비트 부호없는 정수 값과 구별하는 데 사용됩니다. 그리고 rune은 int32와 똑같은 자료형이라고 볼 수 있습니다. 관례상 문자 값을 정수 값과 구별하기 위해 사용합니다.
표

자료형의 변환


데이터의 표현방식을 바꾸는 것이 바로 '자료형의 변환'입니다. 즉, 자료형의 변환이라는 것은 데이터의 표현방식을 바꾸는 것입니다. 이러한 자료형의 변환은 다른 언어들을 비추어 보았을 때 크게 두 종류가 있습니다.

자동 형 변환(묵시적 형 변환)
강제 형 변환(명시적 형 변환)

Go언어에서는 형 변환을 할 때 변환을 명시적으로 지정해주어야합니다.
예를 들어 float32에서 uint로 변환할 때, 암묵적 변환은 일어나지 않으므로 “uint(변수이름)”과 같이 반드시 변환을 지정해줘야합니다. 만약 명시적인 지정이 없다면 런타임 에러가 발생합니다.


© 2022. All rights reserved. 신동민의 블로그