배열과 문자열의 길이
배열의 길이를 구할 때는 사용하고, 문자열의 길이를 구할 때는 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()라는 메서드가 정의되어 있고, 그 메서드가 문자열의 길이를 반환하는 것이다.
반응형
'JAVA & Spring' 카테고리의 다른 글
[Java] Scanner, BufferedReader, BufferedWriter (0) | 2023.06.26 |
---|---|
[JAVA] Comparator / Comparable - 정렬을 위한 클래스(인터페이스) (2) | 2023.06.10 |
[JAVA] Math 클래스 (0) | 2023.06.02 |
[JAVA] format() 메서드 : 문자열 포맷 지정 / printf() (0) | 2023.06.01 |
[JAVA] 람다식과 스트림 Stream() (0) | 2023.05.25 |