IMCAT.DEV
로그인 가입
Go 입문 자료구조

Go 맵 (Maps)

Go 맵 (Maps) — 초급

맵 (Maps)

1. 도입 (왜 배워야 하는가)

Go 언어에서 맵(Map)은 키-값 쌍으로 데이터를 저장하는 자료구조입니다. 이는 데이터베이스의 테이블처럼 각 데이터 항목에 고유한 식별자를 부여하여 효율적으로 접근할 수 있게 해줍니다. 실무에서는 설정 정보, 사용자 세션, 캐시 데이터 등을 관리할 때 맵을 많이 사용합니다. 만약 맵을 사용하지 않는다면, 데이터를 배열이나 슬라이스에 저장하게 되며, 이 경우 효율적인 검색이나 수정이 어려워질 수 있습니다. 예를 들어, 수천 개의 사용자 데이터를 관리할 때, 각 사용자를 이름으로 검색하려면 배열을 사용하면 O(n)의 시간이 걸리지만, 맵을 사용하면 O(1)의 시간 복잡도로 빠르게 검색할 수 있습니다.

2. 핵심 개념 설명

맵은 다음과 같은 핵심 개념으로 구성됩니다:

  • 키 (Key): 데이터를 식별하는 고유한 값입니다.
  • 값 (Value): 키에 대응하는 데이터입니다.
  • 실생활 비유로 설명하자면, 맵은 전화번호부와 같습니다. 전화번호부에서 이름(키)을 통해 해당 사람의 전화번호(값)를 쉽게 찾을 수 있는 것처럼, 맵에서도 키를 통해 값을 쉽게 찾을 수 있습니다.

    용어설명
    키데이터의 고유 식별자
    값키에 매핑되는 데이터
    맵키-값 쌍으로 데이터를 저장하는 구조

    3. 기본 코드 예제

    아래는 Go 언어에서 맵을 사용하는 기본적인 예제입니다.

    package main
    
    import "fmt"
    
    func main() {
        // 맵 초기화
        phoneBook := make(map[string]string)
    
        // 데이터 추가
        phoneBook["Alice"] = "123-456-7890"
        phoneBook["Bob"] = "987-654-3210"
    
        // 데이터 조회
        fmt.Println("Alice의 전화번호:", phoneBook["Alice"])
        fmt.Println("Bob의 전화번호:", phoneBook["Bob"])
    }

    실행 결과

    Alice의 전화번호: 123-456-7890
    Bob의 전화번호: 987-654-3210

    코드 한 줄씩 동작 설명

    1. package main - 메인 패키지를 정의합니다.
    2. import "fmt" - 포맷 입출력 패키지를 가져옵니다.
    3. phoneBook := make(map[string]string) - 키는 문자열, 값도 문자열인 빈 맵을 초기화합니다.
    4. phoneBook["Alice"] = "123-456-7890" - "Alice"라는 키에 전화번호를 추가합니다.
    5. phoneBook["Bob"] = "987-654-3210" - "Bob"이라는 키에 전화번호를 추가합니다.
    6. fmt.Println(...) - 키에 해당하는 값을 출력합니다.
    7. 4. 실전 활용 예제

      예제 1: 쇼핑몰 장바구니 구현

      쇼핑몰에서 장바구니를 구현할 때, 사용자가 선택한 상품과 수량을 맵으로 관리합니다.

      package main
      
      import "fmt"
      
      func main() {
          cart := make(map[string]int)
      
          // 상품 추가
          cart["사과"] = 3
          cart["바나나"] = 2
      
          // 장바구니 출력
          for item, quantity := range cart {
              fmt.Printf("%s: %d개\n", item, quantity)
          }
      }

      예제 2: 학생 성적 관리

      학생의 이름과 성적을 관리하는 경우에도 맵을 사용할 수 있습니다.

      package main
      
      import "fmt"
      
      func main() {
          grades := make(map[string]float64)
      
          // 성적 추가
          grades["홍길동"] = 85.5
          grades["이순신"] = 90.0
      
          // 성적 출력
          fmt.Println("홍길동의 성적:", grades["홍길동"])
      }

      5. 흔한 실수와 주의사항

      실수 1: 키가 없는 경우

      fmt.Println(phoneBook["Charlie"]) // 존재하지 않는 키 "Charlie" 조회
    8. 올바른 접근: 키가 존재하지 않을 경우 기본값을 반환하므로, 조회 전에 키의 존재 여부를 확인해야 합니다.
    9. 실수 2: 맵의 초기화

      var phoneBook map[string]string // 초기화하지 않음
      phoneBook["Alice"] = "123-456-7890" // 런타임 에러 발생
    10. 올바른 접근: make 함수를 사용하여 맵을 초기화한 후 사용해야 합니다.
    11. 6. 정리

    12. 맵은 키-값 쌍으로 데이터를 저장하는 자료구조입니다.
    13. 효율적으로 데이터를 검색, 수정, 삭제할 수 있습니다.
    14. 실생활 비유로 전화번호부와 유사합니다.
    15. 초기화 시 make 함수를 반드시 사용해야 합니다.
    16. 키가 존재하지 않는 경우에는 기본값이 반환됩니다.
    17. 다음에 학습하면 좋은 주제

    18. 슬라이스(Slices)
    19. 구조체(Structs)
    20. 인터페이스(Interfaces)