관리 메뉴

피터의 개발이야기

[GO] Go 언어에서 sync.Map 사용하기 본문

Programming/GO

[GO] Go 언어에서 sync.Map 사용하기

기록하는 백앤드개발자 2025. 2. 18. 20:14
반응형

ㅁ 들어가며

Go 언어의 sync.Map은 동시성 안전한 맵 구현을 제공한다. 일반 map과 달리 여러 고루틴에서 동시에 안전하게 사용할 수 있다. sync.Map의 초기화 및 기본적 사용법을 정리하였다.

 

ㅁ sync.Map 초기화

sync.Map은 별도의 초기화가 필요 없었다.

var m sync.Map

 

 

ㅁ주요 메서드

Store(key, value interface{})

m.Store("key", "value")

ㅇ 맵에 키-값 쌍을 저장

 

 Load(key interface{}) (value interface{}, ok bool)

value, ok := m.Load("key")
if ok {
    fmt.Println("Value:", value)
}

ㅇ 키에 해당하는 값을 조회

 

 Delete(key interface{})

m.Delete("key")

ㅇ 키-값 쌍을 삭제

 

 LoadOrStore(key, value interface{}) (actual interface{}, loaded bool)

actual, loaded := m.LoadOrStore("key", "new value")

ㅇ 키가 존재하면 기존 값을 반환하고, 없으면 새 값을 저장

 

Range(f func(key, value interface{}) bool)

m.Range(func(key, value interface{}) bool {
    fmt.Printf("Key: %v, Value: %v\n", key, value)
    return true
})

ㅇ 맵의 모든 키-값 쌍을 순회

 

ㅁ 사용 시 주의사항

  1. sync.Map은 일반 맵보다 메모리를 더 사용할 수 있다.
  2. 키와 값의 타입이 interface{}이므로 타입 안전성을 위해 타입 단언이 필요할 수 있다.
  3. 읽기 작업이 많고 쓰기가 적은 경우에 성능상 이점이 있다.
     ㄴ 공식 벤치 마크
     ㄴ sync.Map의 성능

 

ㅁ 마무리

sync.Map은 동시성 안전성이 필요한 상황에서 유용하지만, 단일 고루틴 환경에서는 일반 맵이 더 효율적일 수 있다.

 

ㅁ 함께 보면 좋은 사이트

 jacking75 - golang - sync.Map

[GO] #3-11. 패키지 탐방 (sync)

 

 

반응형
Comments