arrayTest.java
public class arrayTest {
public static void main(String[] args) {
int[][] arr = new int[3][4];
System.out.println(arr.length); // 행의 개수
System.out.println(arr[0].length); // 첫 번째 행의 열의 길이
}
}
int[][] arr = new int[3][4]; 으로 선언한 3행 4열의 2차원 배열 arr을 시각화 시키면 아래 이미지와 같다.
행(row)의 길이는 행의 개수와 같다. 따라서 arr.length의 결과는 3이 출력된다. 언뜻 '행의 길이'라고 하면 4를 떠올릴 수 있다. 하지만 그것은 열(column)의 길이다. arr.length의 결과가 행의 개수로 리턴되는 이유는, 행마다 열의 개수가 다를 수 있기 때문이다. 위 이미지는 행마다 일정하게 4개의 열이 있지만, 경우에 따라 1행에는 2개의 열, 2행에는 5개의 열이 있을 수 있다. 따라서 arr.length의 결과가 열의 길이로 리턴될 수 없다.
열(column)의 길이는 '어떤 행'의 열의 개수와 같다. 어떤 행의 열의 개수를 구할지 배열의 인덱스 값으로 지정해야 한다. 배열의 인덱스는 0부터 시작되므로 첫 번째 행의 열의 길이는 arr[0].length를 통해 확인할 수 있다. 4가 출력된다.
'길이'라는 개념으로 접근하다 보니 직관적으로 열의 길이가 3이 아닌가 하는 의문이 있었지만, 직접 코드를 실행해 보면 그렇지 않다는 것을 확인할 수 있었다. 만약 열의 길이가 3이라면 4번째 열의 길이를 구할 수 있어야 한다. 그렇게 arr[3].length를 실행하면 다음과 같은 에러가 발생한다.
public class arrayTest {
public static void main(String[] args) {
int[][] arr = new int[3][4];
System.out.println(arr.length);
System.out.println(arr[3].length); // 에러 발생
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
배열의 길이를 초과했기 때문에 에러가 발생했다. arr[3].length는 '4번째 행의 열의 개수'를 반환하는데, 4번째 열은 존재하지 않는다.
참고
'Programming > Java' 카테고리의 다른 글
[Java] Enum 클래스 (0) | 2021.11.18 |
---|---|
[Java] StringBuilder 클래스 (0) | 2021.10.01 |
[Java] for문 동작 순서 (0) | 2021.09.25 |
[Java] 클래스 생성자 선언 시 사용되는 this와 this() (0) | 2021.09.16 |
[Java] main 메소드 (0) | 2021.09.09 |