기타 정리

타입
길이 접근 방식
이유

Collection, Map

size() 메서드

인터페이스로 통일 가능

배열 (int[])

length 필드

성능/언어 설계상 필드

문자열 (String)

length() 메서드

객체지만 내부 상태 숨기기 위해 메서드

Object

없음

의미 없는 클래스도 많음 (예: Thread, Socket)

✅ 메모리 구조 관점

int[] arr = new int[3];

이 코드가 실행되면:

  1. Heap 영역int 값을 담을 수 있는 공간 3개가 생김

  2. 배열 객체의 길이(length) 정보가 함께 저장됨 (JVM이 자동으로)

  3. 배열은 객체처럼 동작함 (Object를 상속받는 형태로 메모리에 존재)

즉, arr.length는 내부적으로 JVM이 자동으로 제공하는 필드이지, 우리가 배열 선언 시 int length;처럼 직접 변수로 정의하는 것이 아님.


✅ 배열도 객체처럼 동작한다는 증거

System.out.println(arr.getClass().getName()); // [I
System.out.println(arr instanceof Object);    // true

배열은 내부적으로 Object를 상속한 클래스 형태의 구조체로 취급됨 단, size()나 메서드는 없음, 대신 length라는 필드만 자동으로 포함됨

Last updated