자바를 배우다 보면 배열의 길이를 구할 때는 length를 쓰고, 문자열의 길이를 구할 때는 length()를 쓰는 것을 볼 수 있다. 이 둘은 이름이 비슷해서 처음에 헷갈리기 쉽지만, 엄연히 다른 개념이다. 이번 글에서는 두 가지의 차이를 정리한다.
length는 변수(필드)이다
배열의 길이를 구할 때 사용하는 length는 메서드가 아니라 변수이다. 예를 들어 다음과 같은 코드가 있다고 하자.
int[] numbers = {1, 2, 3, 4};
System.out.println(numbers.length); // 출력: 4
여기서 numbers.length는 배열의 길이를 담고 있는 변수이다. 괄호가 붙지 않는 이유는 함수 호출이 아니기 때문이다. 자바에서 배열은 언어 차원에서 제공되는 기본 자료형의 일종으로, 고정된 길이를 갖는다. 이 길이를 바로 접근할 수 있도록 length라는 변수(필드)를 제공하는 것이다.
length()는 메서드(함수)이다
반면 문자열(String)의 길이를 구할 때는 length()를 사용한다. 예시는 다음과 같다.
String str = "Hello";
System.out.println(str.length()); // 출력: 5
여기서 length()는 메서드이다. 즉, 괄호가 붙는 이유는 함수 호출이기 때문이다. String은 배열이 아니라 자바의 클래스이다. 클래스는 내부적으로 상태를 가지고 있고 그 상태를 외부에서 사용할 때 보통 메서드로 제공한다. String의 길이도 이와 같은 방식으로 메서드로 구현돼 있다.
컬렉션(List, Set 등)의 경우
자바에서 컬렉션 자료형의 크기를 구할 때는 size() 메서드를 사용한다. 예를 들어 List의 경우는 다음과 같다.
List<Integer> list = Arrays.asList(1, 2, 3);
System.out.println(list.size()); // 출력: 3
List 역시 클래스이기 때문에 크기를 구할 때 메서드를 호출한다.
왜 이렇게 나뉘었을까
배열은 자바에서 언어 차원에서 만들어진 특별한 자료형이다. 배열은 객체처럼 보이지만 내부적으로는 단순한 자료 구조로 처리된다. 그래서 배열의 길이는 함수 호출 없이 바로 접근할 수 있도록 변수(필드)로 제공된다. 반면 String이나 List 같은 자료형은 객체지향적으로 설계된 클래스이다. 이들은 내부 구조가 더 복잡하기 때문에, 크기나 길이 같은 속성을 메서드로 제공한다.
자바에서 괄호가 붙고 안 붙는 차이는 단순한 문법의 문제가 아니라 해당 요소가 변수(필드)인지 메서드(함수)인지의 차이이다. 배열의 길이는 변수인 length로 제공되며, String이나 컬렉션의 크기는 메서드인 length()나 size()로 제공된다. 이 차이만 명확히 기억하면 헷갈릴 일이 없다.
'java > 그 외 알게된 것들' 카테고리의 다른 글
| GET과 POST의 차이 (0) | 2025.01.08 |
|---|---|
| Public / Static / default (0) | 2024.05.03 |
| This (0) | 2024.05.03 |
| 20240412 중간 정리 (0) | 2024.04.12 |
| 메서드 Method (0) | 2024.04.10 |