Go에서 make와 new의 차이점과 사용법
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

make와 new의 차이점 및 최선의 사용법

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

Go 언어 개발자, 특히 메모리 할당 및 데이터 구조 초기화에 관심 있는 중급 이상 개발자

핵심 요약

  • new는 모든 타입의 메모리 할당에 사용되며, makeslice, 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`의 사용 시나리오

  • structnew (예: new(Person))
  • slice/map/channelmake (예: 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 지정 권장
  • structnew로 초기화 (zero value로 초기화됨)
  • new로 slice/map/channel 생성 시 런타임 오류 발생 → 절대 사용 금지
  • 메모리 효율성을 위해 make의 capacity 매개변수 활용 필수