Java

[JAVA] 배열의 길이 length에는 괄호()가 붙지 않고, 문자열의 길이 length()에는 괄호()가 붙는 이유

HSRyuuu 2023. 6. 3. 21:29

배열과 문자열의 길이

배열의 길이를 구할 때는 사용하고, 문자열의 길이를 구할 때는 str.length()를 사용한다.

사실 코딩테스트 연습문제를 풀 때마다 맨날 헷갈렸다. 배열은 length뒤에 ()를 안 붙여도 되고, 문자열은 붙여야 한다.

항상 "왜 그럴까?"만 생각하고 넘어갔었다. 추측하기로는 str.length()는 뭔가 메서드의 성격을 갖고 있어서 ()가 붙고, arr.length는 그렇지 않은 것 같다는 정도만 생각하고 있었다. 이번에 그 이유를 한번 찾아보았다.

int[] arr = {1,2,3,4};
String str = "hello";

int arr_len = arr.length; //4
int str_len = str.length(); // 5

배열의 length는 함수(메서드)가 아니다?

https://blog.naver.com/thtlsgkrtod/40133271545

위의 링크에서 어떤 분이 댓글을 다신게 있다.

int, char, byte 등은 프로토타입의 변수입니다.

마찬가지로 '[ ]'란 배열의 개념도 프로토타입의 클래스라 보시면 됩니다.

정해진 값들이란 거죠... length... 이것 역시 함수가 아니므로 필드라고 보시면 됩니다.

정해진 필드죠...

프로토타입은 primitive type(원시타입)을 말씀하신 것 같다.


자바 primitive type의 종류


내 생각에 배열은 배열을 선언할 때 크기를 고정해야 하는 특성을 가지므로, 마치 어떤 클래스의 필드에 직접 접근하듯이 해당 배열의 필드 중 하나인 length 필드에 직접 접근해야 하는 것 같다.

 

또한 문자열 String은 primitive type이 아니다. 자바에서 제공하는 클래스 중 하나이다. 또한 해당 클래스에는 length()라는 메서드가 정의되어 있고, 그 메서드가 문자열의 길이를 반환하는 것이다.

반응형