Programming Language/Go

[Golang] 자료형, 배열, 슬라이스

깜태 2022. 2. 23. 00:48
728x90

Go는 병행성, 동시성에 초점을 두고 개발된 컴파일 언어이다.

꼭 그렇진 않지만, 대부분의 컴파일 언어들은 자료형 명시를 필요로 한다.

왜냐하면, 기계어로 번역하고 해석하는 과정에서 자원을 할당해야 하기 때문이다.

 

 

Go는 유연하게 자료형 추론이 가능한 방식이여서 변수 타입을 꼭 설정하지는 않아도 된다는 장점이 있지만,

코드의 효율을 높이는데 있어 자료형과 배열 선언은 중요하다.

오늘은 Go에서 쓰이는 자료형과 배열 선언 방법에 대해 공부하였다.

 

자료형

Go에서 쓰이는 자료형은 C++과 비슷하다.

이름 표현 공간 비고
bool 참, 거짓 1byte  
int 정수형 4byte uint, int8, int16, 등 존재
float 소수 표현 8byte float32, float64
char 문자(ASCII) 1byte uint8, byte와 같음
string 문자열 1byte ~ 4byte utf-8, ascii 등 표현 방식에
가변적

 

자료형 선언 방법

Go에서는 자료형을 선언하는 방식이 2가지 존재한다.

1. var 변수명 자료형

var를 이용하는 방식에서는 변수명 뒤에 자료형을 선언해도 되고, 하지 않아도 된다.

이렇게 하면 누구도 뒤에 자료형을 명시하기 싫어지겠지만, 프로그래밍이 꼬이지 않으려면 명시하는게 중요하다.

var a int = 1
var b = 10
var c = "ABC"

2. := 사용

:= 은 자료형을 추론하는 방식으로 변수형을 따로 선언하지 않아도 된다는 장점이 있다.

a := 1
b := 3.14
c := "ABC"

 

 

배열 선언 방법

Go에서는 배열을 선언하는 방법이 두가지 있는데,

위와 비슷하게 자원관리가 용이하도록 크기를 명시하는 방법과 크기를 명시하지 않는 방법이 있다.

정확히는 할당하지 않은 경우를 슬라이스(Slice)라 하고, 할당한 경우는 배열(Array)라고 한다.

 

배열 선언 

선언 하는 방법은 위와, 그리고 C++과 비슷하지만 차이점이 있다면 배열의 크기가 자료형 앞에 와야 한다.

//할당 및 초기화
var a = [3]int{1,2,3}

//메모리 할당 후, 변수 입력
var a [3]int
a[0] = 1
a[1] = 2
a[2] = 3

 

 

슬라이스 선언

크기만 설정하지 않았을 뿐, 배열과 매우 유사하다.

var a []int
a = []int{1, 2, 3}
var b [] = [...]{1, 2, 3}

다른 방식으로 make()라는 함수를 통해서,  배열 크기와, 최대 크기를 넣는 것도 가능하다.

a := make([]int, 5, 10) //초기 길이는 5이지만, 최고 길이는 10인 배열 선언
b := make([]int, 5)  // 길이가 5인 배열 선언

 

마지막으로, Go는 Python과 유사하게 부분 슬라이싱 기능이 있어서 매우 편리하다. (개꿀)

부분 슬라이싱(sub-slice)

부분 슬라이싱이란, 배열의 부분요소를 편리하게 가져오는 기능이다.

리스트 인덱싱은 :을 기준으로, 인덱스를 입력하면 편리하게 부분배열을 가져올 수 있다.

파이썬과 조금 다른점이 있다면, 파이썬에서는 [:-1]을 하면 마지막 하나 전까지가 가능했는데,

Go에서는 [:len(data) -1] 으로 명시해줘야 한다.

 

s := []int{0, 1, 2, 3, 4, 5}
s = s[2:5]     // 2, 3, 4
s = s[1:]      // 3, 4
fmt.Println(s) // 3, 4 출력

 

슬라이싱이 있어서 매우 좋은 점은, C++ 같이 생겼는데 파이썬처럼 배열 크기 변화가 유연하게 대처가 된다는 점이다.

s := []int{0, 1}
// 하나 확장
s = append(s, 2) // 0, 1, 2
// 복수 요소들 확장
s = append(s, 3, 4, 5) // 0,1,2,3,4,5

배열 간 합치는 것도 유연하게 된다. 파이썬 쓰다 와서 그런지 이것도 편하다 ㅎㅎ

sliceA := []int{1, 2, 3}
sliceB := []int{4, 5, 6}
 
sliceA = append(sliceA, sliceB...)

 

오늘은 기초적인 자료형과 변수형에 대해 공부하였다.

Go는 병렬성, 동시성에 초점을 많이 둔 언어이기 때문에

조만간 Go의 핵심인 고루틴에 대해서 공부하여 적어야겠다.

728x90