JAVA

new를 언제? 왜 붙여야하는가? (final)

싸블양 2025. 6. 19. 13:00

배열을 return할 때는
return {1, 2, 3}; ❌ 불가능한데,
왜 new 없이 리터럴을 사용할 수 없는 걸까?

 


먼저 결론부터

{1, 2, 3}은 "배열 리터럴"로서, 오직 배열을 "선언 + 초기화"하는 경우에만 허용되는 특수 문법입니다.

그래서 return처럼 선언이 아닌 문맥에서는 반드시 new가 필요합니다.


🔍 상황별 비교

 

코드 의미 가능여부
int[] nums = {1, 2, 3}; 선언 + 리터럴 초기화 ✅ 가능
return new int[] {1, 2, 3}; 리턴문에서 배열 생성 ✅ 가능
return {1, 2, 3}; 리터럴만으로 리턴 ❌ 불가능
return int[] {1, 2, 3}; 타입까지 명시했지만 선언 아님 ❌ 불가능

왜 안 되는가?

📌 1. {} 문법은 오직 "선언 시 초기화"에만 허용된 예외 문법

int[] arr = {1, 2, 3}; // OK

이건 자바가 특별히 허용한 배열 리터럴 축약 문법입니다.
컴파일러가 자동으로 이렇게 바꿔줘요:

int[] arr = new int[] {1, 2, 3};

 그런데 return문에서는 선언이 없습니다!

return {1, 2, 3}; // 누구한테 넣는 건데? 타입은 뭔데? 선언이 없어!❌ 불가능
  • 이건 변수 선언이 아니라 **표현식(Expression)**이기 때문에,
  • 자바 컴파일러는 new 없이 배열 객체를 만드는 문법을 허용하지 않습니다.

📌 2. 자바는 정적 타입 언어 → 문맥을 명확히 해야 함

  • 자바는 컴파일러가 모든 타입과 메모리 구조를 명시적으로 알아야만 작동합니다
  • {1, 2, 3}만 덜렁 있으면 컴파일러가 타입, 크기, 위치, 메모리 할당 방법을 알 수 없음

→ 그래서 자바는 **"return하려면 네가 명확하게 new int[] 붙여서 말해!"**라고 강제하는 거예요


결론 요약

배열을 return할 때 왜 {1, 2, 3}만 쓸 수 없나요? 자바는 {}를 오직 선언 + 초기화에서만 허용하는 문법적 예외로 보기 때문입니다
그럼 return할 때는 어떻게 해야 하나요? return new int[] {1, 2, 3};처럼 명확하게 써야 합니다
이유는? return은 변수 선언이 아니고, 자바는 정적 타입 언어이기 때문에 문맥이 불명확하면 허용하지 않음

 

 

그러니까 쉽게 이야기하면 자바는 { 1, 2, 3 } 이렇게있으면 못알아듣는다 이말입니다.

 

'JAVA' 카테고리의 다른 글

스택 메모리 (Stack Memory)  (0) 2025.07.08
Hashmap in java (1)  (0) 2025.06.21
new를 언제? 왜 붙여야하는가? (3)  (0) 2025.06.19
new를 언제? 왜 붙여야하는가? (2)  (0) 2025.06.18
new를 언제? 왜 붙여야하는가? (1)  (1) 2025.06.14