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

자바는 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 |