Go에서 `make` 및 맵 초기화(예: `make map`) 이해
Ethan Miller
Product Engineer · Leapcell

Key Takeaways
make
함수는 맵에 대한 메모리를 초기화하고 할당하여 즉시 사용할 수 있도록 합니다.new
는 nil 맵에 대한 포인터를 반환하므로 사용하기 전에 추가 초기화가 필요합니다.- 맵 리터럴은 미리 정의된 키-값 쌍으로 맵을 선언하고 초기화하는 간결한 방법을 제공합니다.
Go에서 맵은 정렬되지 않은 키-값 쌍을 저장하는 필수적인 데이터 구조로, 키를 사용하여 효율적인 데이터 검색을 가능하게 합니다. 맵의 올바른 초기화는 런타임 오류를 피하고 최적의 성능을 보장하는 데 중요합니다. 이 기사에서는 맵 초기화에서 make
함수의 역할과 Go에서 맵을 생성하는 다른 방법과 비교합니다.
맵 초기화에서 make
의 역할
Go에서 make
함수는 슬라이스, 맵 및 채널에 대한 메모리를 초기화하고 할당하도록 특별히 설계된 내장 함수입니다. 맵의 경우 make
는 필요한 메모리를 할당할 뿐만 아니라 맵을 사용할 준비가 되었는지 확인합니다. 다음은 make
를 사용하여 맵을 만드는 방법입니다.
dict := make(map[string]int)
이 예에서 dict
는 string
유형의 키와 int
유형의 값을 가진 맵입니다. make
함수는 맵을 초기화하여 키-값 쌍을 즉시 추가할 수 있도록 합니다.
dict["Alice"] = 30
적절하게 초기화되지 않은 맵에 요소를 추가하려고 하면 런타임 패닉이 발생합니다. 따라서 make
를 사용하는 것이 맵이 작업 준비가 되었는지 확인하는 표준 및 권장되는 접근 방식입니다.
make
와 다른 맵 생성 방법 비교
make
가 맵을 초기화하는 일반적인 방법이지만 Go는 맵을 선언하는 다른 방법을 제공하며, 각 방법에는 고유한 뉘앙스가 있습니다.
맵 리터럴 사용
맵 리터럴을 사용하면 맵을 간결하게 선언하고 초기화할 수 있습니다. 이 접근 방식은 선언 시점에 초기 키-값 쌍을 알 때 특히 유용합니다.
dict := map[string]int{ "Alice": 30, "Bob": 25, }
이 구문은 맵을 선언할 뿐만 아니라 제공된 키-값 쌍으로 초기화합니다. 맵은 이 선언 직후에 사용할 준비가 됩니다.
new
함수 사용
Go에서 new
함수는 메모리를 할당하고 지정된 유형의 제로 값에 대한 포인터를 반환합니다. 맵과 함께 사용하면 즉시 사용할 준비가 되지 않은 nil 맵에 대한 포인터를 반환합니다.
dictPtr := new(map[string]int)
여기서 dictPtr
은 nil 맵에 대한 포인터입니다. 이 맵을 사용하려면 먼저 make
를 사용하여 초기화해야 합니다.
*dictPtr = make(map[string]int) (*dictPtr)["Alice"] = 30
또는 완전히 초기화된 맵에 할당할 수 있습니다.
initializedMap := make(map[string]int) *dictPtr = initializedMap
new
만 사용하면 맵에 필요한 기본 데이터 구조가 할당되지 않아 제대로 초기화될 때까지 키-값 쌍을 저장할 수 없는 nil 맵이 됩니다.
make
와 new
의 주요 차이점
-
초기화:
make
는 맵에 대한 메모리를 초기화하고 할당하여 즉시 사용할 수 있도록 합니다. 반대로new
는 맵 포인터에 대한 메모리를 할당하지만 기본 맵을 초기화하지 않아 맵을 사용 가능하게 만들려면 추가 단계가 필요합니다. -
반환 유형:
make
는 초기화된 맵을 반환하는 반면new
는 nil 맵에 대한 포인터를 반환합니다.
결론
make
, new
및 맵 리터럴 간의 차이점을 이해하는 것은 Go에서 효과적인 맵 초기화에 필수적입니다. make
함수는 맵, 슬라이스 및 채널을 초기화하는 데 맞춰져 즉시 사용할 수 있도록 합니다. new
는 맵 포인터에 대한 메모리를 할당할 수 있지만 맵 자체를 초기화하지 않아 맵을 활용하기 전에 추가 단계가 필요합니다. 맵 리터럴은 알려진 키-값 쌍으로 맵을 선언하고 초기화하는 간결한 방법을 제공합니다. 적절한 초기화 방법을 선택하면 더 강력하고 오류 없는 Go 프로그램을 작성할 수 있습니다.
FAQs
make
는 맵을 즉시 사용할 수 있도록 초기화하는 반면 new
는 포인터에 대한 메모리만 할당하여 맵을 초기화되지 않은 상태로 둡니다.
간결하고 읽기 쉬운 코드를 위해 선언 시점에 초기 키-값 쌍을 알 때 맵 리터럴을 사용합니다.
nil 맵에 키-값 쌍을 할당하려고 하면 런타임 패닉이 발생하므로 make
또는 맵 리터럴을 사용하여 적절하게 초기화해야 합니다.
Go 프로젝트 호스팅에 가장 적합한 Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하십시오.
무료로 무제한 프로젝트 배포
- 사용량에 따라서만 지불하십시오. 요청도 없고 요금도 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼만 지불하십시오.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI.
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합.
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅.
간편한 확장성 및 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 크기 조정.
- 운영 오버헤드가 없어 구축에만 집중할 수 있습니다.
설명서에서 자세히 알아보십시오!
X에서 팔로우하세요: @LeapcellHQ