개요
Golang에서 Map은 자주 사용되는 자료구조 중 하나입니다. 하지만 Map을 사용할 때 주의해야할 점들이 있습니다. 이번 포스팅에서는 Golang에서 Map을 사용할 때 고려해야하는 점들에 대해서 알아보려고 합니다.
Golang에서 Map의 선언
Golang에서 Map을 선언하는 방법은 아래와 같습니다.
- Map 선언 및 초기화
1myMap := make(map[string]int)
2
3myMap["key1"] = 100
4myMap["key2"] = 200
5
6fmt.Println(myMap["key1"]) // 100
- 값 삭제
1delete(myMap, "key1")
- 값 존재 여부 확인
1value, exists := myMap["key2"]
2if exists {
3 fmt.Println("Value for key2:", value)
4} else {
5 fmt.Println("Key2 does not exist")
6}
성능 관점에서의 Map
맵을 초기화할 때 예상되는 크기를 지정하면 성능 향상을 기대할 수 있습니다.
1package main
2
3import (
4 "fmt"
5 "time"
6)
7
8func main() {
9 // 크기를 지정하지 않은 맵
10 start := time.Now()
11 map1 := make(map[int]int)
12 for i := 0; i < 1000000; i++ {
13 map1[i] = i
14 }
15 elapsed := time.Since(start)
16 fmt.Printf("Without size: %s\n", elapsed)
17
18 // 크기를 지정한 맵
19 start = time.Now()
20 map2 := make(map[int]int, 1000000)
21 for i := 0; i < 1000000; i++ {
22 map2[i] = i
23 }
24 elapsed = time.Since(start)
25 fmt.Printf("With size: %s\n", elapsed)
26}
- 결과
Without size: 93.496583ms
With size: 39.520625ms
위에 보면 크기를 지정한 맵이 더 빠르게 초기화되는 것을 확인할 수 있습니다. 이는 맵이 커질수록 해시 테이블을 재조정해야하는데(리해싱), 초기에 크기를 지정하면 이 작업을 줄일 수 있기 때문입니다.
해시 테이블 (hash table) 리해싱(rehashing)에 대해서 알아보기
Map의 특성
Map의 특성을 이해하고 사용하는 것이 중요합니다. 그렇지 않으면 예상치 못한 결과가 발생할 수 있습니다.
Golang의 맵은 키 순서대로 정렬되지 않음
Golang 맵은 키 순서대로 정렬되지 않습니다. for 루프를 사용하여 순회할 때마다 순서가 변경될 수 있습니다.
1package main
2
3import "fmt"
4
5func main() {
6 myMap := map[string]int{
7 "apple": 5,
8 "banana": 3,
9 "cherry": 8,
10 }
11
12 for key, value := range myMap {
13 fmt.Println(key, value)
14 }
15}
- 결과
cherry 8
apple 5
banana 3
Loop에서 Map에 추가된 요소는 그 회차에 생성되는 것을 보장할 수 없음
맵을 순회하는 동안 맵에 요소를 추가하면, 추가된 요소가 그 회차에 추가될 수도 있고 아닐 수도 있습니다.
1package main
2
3import "fmt"
4
5func main() {
6 myMap := map[string]int{
7 "apple": 5,
8 "banana": 3,
9 }
10
11 for key, value := range myMap {
12 fmt.Println(key, value)
13 myMap["cherry"] = 8
14 }
15
16 fmt.Println("After loop:")
17 for key, value := range myMap {
18 fmt.Println(key, value)
19 }
20}
apple 5
banana 3
After loop:
apple 5
banana 3
cherry 8
정리
Golang에서 Map을 선언하고 사용하는 법에 대해서 간단하게 소개하였고 Map 사용시 성능적인 측면과 특성에 대해서 알아보았습니다. Map은 많이 사용되는 자료구조 중 하나이므로 잘 이해하고 사용하는 것이 중요합니다.