[Go] Map 활용하기

반응형

Map 초기화

Go 언어에서 Map은 make 함수를 사용하여 초기화할 수 있습니다. make 함수는 맵의 타입을 지정하고, 맵의 초기 크기를 지정할 수 있습니다. 만약 초기 크기를 지정하지 않으면, 기본적으로 맵은 0으로 초기화됩니다.

예를 들어, string을 키로, int를 값으로 가지는 맵을 초기화하려면 다음과 같이 작성합니다.

m := make(map[string]int)

make 함수로 초기화된 맵은 nil이 아니기 때문에, 바로 사용할 수 있습니다.

m["one"] = 1
m["two"] = 2

 

 

 

Go 언어에서 Map은 make 함수를 사용하여 초기화할 수 있을 뿐만 아니라, 리터럴(literal)을 사용하여 초기화할 수도 있습니다. Map 리터럴은 중괄호({}) 안에 콤마(,)로 구분된 키-값 쌍(key-value pair)을 나열하여 생성합니다.

예를 들어, string을 키로, int를 값으로 가지는 맵을 리터럴로 초기화하려면 다음과 같이 작성합니다.

m := map[string]int{
    "one": 1,
    "two": 2,
}

위와 같은 방식으로 초기화된 맵은 make 함수로 초기화된 맵과 동일하게 동작합니다.

 

 

 

Map 활용

데이터 확인

Map에서 key가 존재하는지 확인하려면, value, exists := m[key]와 같은 방식으로 사용합니다. existskey가 존재하는지 여부를 나타내는 부울 값입니다.

value, exists := m["one"]
if exists {
    fmt.Println(value) // 1
}

 

 

 

데이터 사용

Go 언어에서 Map은 key-value 쌍으로 데이터를 저장하는 자료구조입니다. Map에서 key는 유일해야 하며, value는 중복되어도 상관없습니다. Map에서 key[] 연산자를 사용하여 접근할 수 있습니다.

예를 들어, 위에서 초기화한 맵을 다음과 같이 접근할 수 있습니다.

fmt.Println(m["one"]) // 1
fmt.Println(m["two"]) // 2

 

key에 해당하는 value가 존재하지 않으면, 새로운 key-value 쌍을 추가합니다.

m := make(map[string]int)
m["one"] = 1
m["two"] = 2

m["three"] = 3 // "three": 3을 추가

위와 같은 방식으로 Map에서 key에 해당하는 value를 갱신하거나 추가할 수 있습니다.

 

 

 

데이터 갱신

Map에서 key에 해당하는 value를 갱신하는 방법은 아래와 같이 key에 해당하는 value에 새로운 값을 할당하는 것입니다.

m := make(map[string]int)
m["one"] = 1
m["two"] = 2

m["one"] = 3 // "one"에 해당하는 value를 3으로 갱신

 

 

데이터 삭제

Map에서 delete 함수를 사용하여 key를 삭제할 수 있습니다.

delete(m, "one")

 

 

 

예제

다음은 Map을 사용하여 상품의 이름과 가격을 저장하고, 최소 가격과 최대 가격을 출력하는 예제입니다.

package main

import (
    "fmt"
    "math"
)

func main() {
    products := map[string]int{
        "apple":  1_500,
        "banana": 2_000,
        "orange": 1_000,
        "grape":  3_000,
    }

    minPrice := math.MaxInt64
    maxPrice := 0
    for _, price := range products {
        if price < minPrice {
            minPrice = price
        }
        if price > maxPrice {
            maxPrice = price
        }
    }

    fmt.Printf("Min price: %d\n", minPrice)
    fmt.Printf("Max price: %d\n", maxPrice)
}

위 예제에서는 products 맵을 사용하여 상품의 이름과 가격을 저장합니다. 초기 데이터는 Map 리터럴을 사용하여 초기화하였습니다. 그리고 minPricemaxPrice 변수를 사용하여 가격의 최소값과 최대값을 계산합니다.

 

현재 가격이 minPrice보다 작으면 minPrice 값을 현재 가격으로 갱신하고, 현재 가격이 maxPrice보다 크면 maxPrice 값을 현재 가격으로 갱신합니다.

 

마지막으로, fmt.Printf 함수를 사용하여 최소 가격과 최대 가격을 출력합니다.