make와 new의 차이점 및 최선의 사용법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Go 언어 개발자, 특히 메모리 할당 및 데이터 구조 초기화에 관심 있는 중급 이상 개발자
핵심 요약
new
는 모든 타입의 메모리 할당에 사용되며,make
는 slice, map, channel에만 적용 가능new
는 포인터를 반환하고,make
는 객체 자체를 반환make
는 slice/capacity 초기화 시 성능 최적화에 유리new
는 struct 초기화에 적합make
를 slice/map/channel에 사용하지 않으면 런타임 오류 발생
섹션별 세부 요약
1. `new`의 특징 및 예시
- 메모리 할당 후 타입의 zero value로 초기화
- 예시:
new(int)
→0
으로 초기화된int
포인터 반환 - 모든 타입에 사용 가능(예: struct, int, string 등)
2. `make`의 특징 및 예시
- slice, map, channel에만 적용
- 예시:
make([]int, 5, 10)
→ 길이 5, 용량 10의 slice 생성 - 메모리 할당과 동시에 데이터 구조 초기화 수행
3. `new` vs `make`의 사용 시나리오
- struct →
new
(예:new(Person)
) - slice/map/channel →
make
(예:make(chan int, 2)
) new
로 slice/map/channel 생성 시 nil 포인터 반환 → 런타임 오류 발생
4. 성능 고려사항
make
는 slice/map/channel 생성 시 capacity 지정 권장 (메모리 재할당 방지)new
는 단순 메모리 할당 → 초기화 오버헤드가 낮음
5. 잘못된 사용 예시
new(map[string]int)
→ nil 포인터 반환make
로 slice/map/channel 생성하지 않으면 접근 시 런타임 오류 발생
결론
- slice, map, channel은 반드시
make
로 초기화하고, capacity 지정 권장 - struct는
new
로 초기화 (zero value로 초기화됨) new
로 slice/map/channel 생성 시 런타임 오류 발생 → 절대 사용 금지- 메모리 효율성을 위해
make
의 capacity 매개변수 활용 필수