PHpullh

GO · 컬렉션

sync.Map

sync.Map은 동시성 안전한 맵입니다. 키가 안정적이고 고루틴별로 다른 키를 사용할 때 최적입니다.

컬렉션중급sync-mapconcurrentmapgoroutine-safe

핵심 설명

sync.Map은 동시성 안전한 맵입니다. 키가 안정적이고 고루틴별로 다른 키를 사용할 때 최적입니다.

Go code

package main

import (
	"fmt"
	"sync"
)

func main() {
	var m sync.Map

	// 저장
	m.Store("lang", "Go")
	m.Store("version", "1.22")

	// 로드
	v, ok := m.Load("lang")
	fmt.Println(v, ok) // Go true

	// 없으면 저장, 있으면 기존 값 반환
	actual, loaded := m.LoadOrStore("lang", "Rust")
	fmt.Println(actual, loaded) // Go true (이미 있음)

	// 삭제
	m.Delete("version")

	// 순회
	m.Store("os", "linux")
	m.Range(func(key, value any) bool {
		fmt.Printf("%s = %s\n", key, value)
		return true // false면 순회 중단
	})

	// LoadAndDelete (Go 1.15+)
	v, loaded = m.LoadAndDelete("os")
	fmt.Println("삭제:", v, loaded)
}

학습 팁

sync.Map은 키가 한번 쓰고 여러 번 읽히거나, 고루틴마다 다른 키를 사용할 때 최적입니다.

주의할 점

sync.Map은 타입 안전하지 않습니다(any 사용). 대부분의 경우 제네릭 + sync.RWMutex 조합이 더 낫습니다.

자주 묻는 질문

sync.Map란 무엇인가요?

sync.Map 은 동시성 안전한 맵입니다. 키가 안정적이고 고루틴별로 다른 키를 사용할 때 최적입니다.

sync.Map 학습 시 주의할 점은 무엇인가요?

sync.Map 은 타입 안전하지 않습니다( any 사용). 대부분의 경우 제네릭 + sync.RWMutex 조합이 더 낫습니다.