Go 언어 메모리 할당: make vs new 명확히 이해하기
🤖 AI 추천
Go 언어를 사용하여 효율적이고 유지보수 가능한 코드를 작성하고자 하는 모든 수준의 Go 개발자에게 추천합니다. 특히 슬라이스, 맵, 채널의 초기화 및 관리에 대한 이해를 높이고 싶은 개발자에게 유용합니다.
🔖 주요 키워드

핵심 기술: Go 언어에서 메모리 할당에 사용되는 make
와 new
키워드의 근본적인 차이점을 이해하고, 각 함수의 용도와 적합한 사용 시나리오를 명확히 파악하는 것입니다.
기술적 세부사항:
* new
함수:
* 모든 Go 타입에 대해 메모리를 할당하고 해당 타입의 포인터를 반환합니다.
* 할당된 메모리는 해당 타입의 제로 값으로 초기화됩니다 (int는 0, string은 "", struct는 각 필드의 제로 값).
* 주로 struct
와 같은 기본 타입의 포인터를 생성하는 데 사용됩니다.
* 예시: p := new(int)
는 *int
타입의 포인터를 반환하며, *p
의 값은 0입니다.
* make
함수:
* Go의 세 가지 내장 복합 타입인 slice
, map
, channel
을 초기화하기 위해 특별히 설계되었습니다.
* 할당된 메모리뿐만 아니라 데이터 구조 자체를 초기화하고, 객체 자체를 반환합니다 (포인터가 아님).
* 슬라이스, 맵, 채널의 경우 초기 길이(length)와 용량(capacity)을 지정할 수 있습니다.
* 예시: s := make([]int, 5)
는 길이가 5인 int
슬라이스를 생성하며, m := make(map[string]int, 10)
는 초기 용량이 10인 map
을 생성합니다.
개발 임팩트:
* make
와 new
의 올바른 사용은 Go 프로그램의 효율성을 높이고, 불필요한 메모리 할당을 줄이며, 런타임 오류를 방지하는 데 필수적입니다.
* 특히 슬라이스, 맵, 채널을 사용할 때 초기 용량을 지정하면 성능 최적화에 큰 도움이 됩니다.
* 잘못된 사용 (예: new
로 슬라이스나 맵을 생성하려 시도)은 런타임 패닉을 유발할 수 있으므로 주의해야 합니다.
커뮤니티 반응:
* Go 커뮤니티에서는 make
와 new
의 차이에 대한 질문이 빈번하며, 명확한 이해는 Go 학습의 필수 과정으로 여겨집니다. 개발자들은 이 두 함수의 올바른 사용법을 통해 코드의 가독성과 성능을 개선합니다.