[Java] length() vs. length 비교
java에서 length()와 length에는 차이가 존재한다.
먼저, 메서드는 특정 객체에 대해 동작하는 함수를 의미하며 호출할 때 항상 괄호를 붙여야 한다. 반면, 어떤 때에는 괄호를 붙이지 않는 속성도 있는데, 이는 필드 또는 변수로 값을 직접 참조하는 경우다.
이에 대해 자세히 알아보자.
1. length() 메서드
아래 예시에서 A는 문자열(String) 객체이고, A.length()는 문자열의 길이를 반환하는 메서드다. 자바에서 문자열의 길이를 구할 때는 length() 메서드를 호출해야 한다.
String A = "Hello";
int len = A.length(); // 문자열의 길이를 반환하는 메서드
2. length 필드
배열의 길이 arr.length에서 length는 메서드가 아닌 필드다.
자바에서는 배열의 길이를 메서드가 아닌 필드로 저장하고 있으며, 배열의 길이에 접근할 때는 괄호 없이 length필드를 사용한다.
int[] arr = {1, 2, 3, 4, 5};
int len = arr.length; // 배열의 길이를 반환하는 필드
왜 이런 차이가 생기는가?
- 문자열의 길이는 자바에서
String클래스의 객체가 가지고 있는 정보를 계산해 반환하는 동작이므로, 메서드length()로 정의되어 있다. 즉, 문자열의 길이는 동적으로 계산될 수 있는 정보이기 때문에 함수 호출로 처리된다. - 반면에 배열의 길이는 배열이 생성될 때 이미 정해진 값으로, 변경되지 않으며 항상 고정된 값을 갖는다. 따라서 이 값은
length라는 필드로 저장되고, 필드는 메서드가 아니므로 괄호 없이 값을 참조할 수 있다.
요약
- 문자열의 길이:
A.length()(메서드이므로 괄호 필요) - 배열의 길이:
arr.length(필드이므로 괄호 없음)