본문 바로가기

java/그 외 알게된 것들

자바에서 length와 length()의 차이

자바를 배우다 보면 배열의 길이를 구할 때는 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