JAVA

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

싸블양 2025. 6. 14. 15:59

문제를 풀고 제출했는데 오류를 맞이했다.

new를 붙이지않아 오류가 난 모습

 

자바는 int[] {1,2,3}; 처럼 리터럴로 쓰는걸 허용하지않는다고한다.

 

그렇다면 리터럴은 무엇일까?

int number = 10;             // 10은 정수형 리터럴
double pi = 3.14;            // 3.14는 실수형 리터럴
char letter = 'A';             // 'A'는 문자형 리터럴
boolean isTrue = true;   // true는 boolean 리터럴
String name = "Tom";   // "Tom"은 문자열 리터럴

 

자바에서 리터럴이란, 그 자체로 값을 의미하는 고정된 데이터를 뜻한다.

 

리터럴과 primitive type의 개념이 헷갈릴수있다.

(primitive type은 리터럴을 가질 수 있는 타입 중 하나일 뿐이다.
String은 reference type이지만 문자열 리터럴 "Tom" 을 가질 수 있다)

int num = 5;        // 5는 정수형 리터럴 (primitive type에 할당)
String name = "Tom"; // "Tom"은 문자열 리터럴 (reference type에 할당)

즉, 리터럴은 타입에 상관없이 "값을 직접 적은 것"을 뜻하고,
primitive type은 그 중 일부에서 사용하는 타입일 뿐입니다.

 

 

그렇다면 다시돌아가서 int[ ]

자바는 배열을 생성할 때 항상 new를 통해 메모리에 배열 객체를 생성해야 한다

 

int[ ] numbers = new int[5];  // 길이가 5인 int형 배열 생성

 

그렇지만 리터럴이 허용되는 경우도있다. 그것은 선언할때입니다.

int[] nums = {1, 2, 3}; // OK! → 컴파일러가 자동으로 new int[] {1, 2, 3}로 변환해줌

 

이유는

  • 배열을 선언하고 동시에 값을 넣는 건 매우 흔한 패턴이기 때문에
  • 문법을 간결하게 하려고 특별히 예외 허용

 

 

정리하면

int[ ] nums = {1, 2, 3};    // 가능 (선언)

return int[ ] {1, 2, 3};      //  불가능 (선언 이외의 상황)

 

->

return new int[] {1, 2, 3}; 

로 바뀌어야하는것이다

 

그렇다면

자바는 왜 배열을 생성할 때 항상 new를 통해 메모리에 배열 객체를 생성해야 할까?

 

다음에계속..

'JAVA' 카테고리의 다른 글

new를 언제? 왜 붙여야하는가? (3)  (0) 2025.06.19
new를 언제? 왜 붙여야하는가? (2)  (0) 2025.06.18
Java 메서드 구조 분석  (0) 2025.06.14
클래스와 오브젝트  (0) 2025.06.13
JAVA  (0) 2025.03.20