[go] sync 패키지의 map 기능
Go 언어에서 map은 여러 고루틴이 동시에 접근할 때 안전하지 않을 수 있습니다. 이 문제를 해결하기 위해 Go 표준 라이브러리의 sync
패키지를 사용할 수 있습니다. 이번 글에서는 sync
패키지를 사용하여 안전하게 map을 관리하는 방법에 대해 알아봅니다.
Map의 안전한 동시 접근 문제
map은 여러 고루틴에서 동시에 접근할 때 데이터 무결성이 위협받을 수 있습니다. 예를 들어, 하나의 고루틴이 map을 수정하는 중이고 동시에 다른 고루틴이 해당 map을 읽는다면 예상치 못한 결과가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 sync
패키지에서 제공하는 Map
타입을 사용할 수 있습니다.
sync.Map 사용하기
sync.Map
은 여러 고루틴이 안전하게 map을 읽고 쓸 수 있도록 해주는 타입입니다. 아래는 sync.Map
을 사용하는 간단한 예제 코드입니다.
package main
import (
"fmt"
"sync"
)
func main() {
var m sync.Map
m.Store("key", "value")
val, ok := m.Load("key")
if ok {
fmt.Println(val)
}
}
sync.Map
은 Store
메서드로 값을 저장하고, Load
메서드로 값을 읽어올 수 있습니다. Load
메서드는 두 개의 반환 값을 가지는데, 첫 번째 값은 key에 대응하는 값이고, 두 번째 값은 해당 key가 존재하는지 여부를 나타내는 bool 값입니다.
결론
map을 안전하게 동시에 접근하고자 할 때는 sync.Map
을 사용하는 것이 좋습니다. 이를 통해 고루틴 간의 안전한 데이터 공유가 가능해지며, 이로인해 프로그램의 안정성과 신뢰성을 확보할 수 있습니다.
sync.Map
에 대한 더 자세한 정보는 공식 Go 언어 문서에서 확인할 수 있습니다.