TIL: 스스로 이해한 것을 바탕으로 정리하였기에 오류가 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다.
이차원배열/다차원배열 (Dimensional Array)
1차원 배열들의 묶음,
일차원 배열 여러개를 하나로 묶은 것을 이차원 또는 다차원배열이라고 부른다.
(2차원배열의 묶음은 3차원배열이 된다.)
이차원 배열 선언
1) 자료형 배열명[ ] [ ] ;
2) 자료형[ ] 배열명[ ] ;
3) 자료형[ ] [ ] 배열명 ;
int arr[ ][ ] ;
int[ ] arr[ ] ;
int[ ][ ] arr ;
이차원 배열 할당(크기지정)
배열명 = new 자료형 [행크기] [열크기] ;
arr = new int [ 2 ] [ 3 ] ;
이차원 배열 선언과 동시에 할당
자료형[ ][ ] 배열명 = new 자료형 [행크기] [열크기] ;
호출 값을 보면,
System.out.println(arr); ==> stack에 있는 주소 값이 호출된다.
System.out.println(arr[0]); ==> heap에 있는 첫 번째 행의 주소 값이 호출된다.
System.out.println(arr[0][0]); ==> 윗 첫 번째 행 주소값 속 첫번째 인덱스가 호출된다.
이해가 어려울 것 같아서 그림을 가지고 왔다.
좌측에 있는 그림은 메모리 속 배열의 저장을 그려 넣은 것이다. (Static은 빠져있다.)
int[ ][ ] arr = new int[2][4]; 의 이차원 배열을 선언했다고 쳤을 때,
1. 일단 배열을 선언과 동시에 Heap이라는 공간에 박스(그림에서의 세로 박스/2행)가 만들어진다.
2. 그리고 그의 주소 값, 0a123을 담은 배열박스가 Stack에 동시에 만들어진다.
3. 하지만, 이것이 이차열 배열이 되면 Heap공간에 새로운 박스(가로 박스/4열)가 생성되고, 행의 박스에 열의 주소 값이 담기게 된다.
Stack속 주소 값을 담은 박스의 자료형은 int[ ][ ] 로서, 이 박스인 (arr)을 출력시키면 heap에 있는 int[ ](행)의 주소 값이 출력된다.
그다음, heap으로 들어가있는 행의 자료형은 int[ ] 으로서, [ ]하나가 스며들었다고 보면된다. 이 박스(arr[0])를 출력시키면, 그 안에 담긴 열의 주소값을 출력시킨다.
그 다음, 하나만 남은 열의 박스를 출력시키면 그제야 해당 인덱스를 출력시키는 것이다.
예시 1) for문과 이차원배열을 사용해서 별 찍기 (바깥쪽은 행, 안쪽은 열)
int [ ] [ ] arr = new int [3] [5] ;
for(int i= 0; i<arr.length; i++) {
for(int j=0; j<arr.length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
가변 배열
행은 정해져 있으나 각 행에 대한 열의 개수가 정해져 있지 않은 상태
위 좌측의 그림처럼 열의 길이가 꼭 같을 필요는 없다.
또한 우측의 그림처럼 열이 존재하지 않을 경우 heap행에 있는 열의 주소 값은 null이다. (주소가 아직 존재하지 않음)
가변 배열의 할당
자료형[ ][ ] 배열명 = new 자료형 [행크기][ ] ;
배열명[행 인덱스] = new 자료형 [열크기];
ex.
int[ ][ ] arr = new int [3] [ ] ;
arr[0] = new int[2]; //첫번째 행의 열박스 두개 생성;
arr[1] = new int[1]; //두번째 행의 열박스 하나 생성;
arr[2] = new int[3]; //세번째 행의 열박스 하나 생성;
'Java' 카테고리의 다른 글
[Java] 접근제한자? public/protected/default/private (0) | 2021.01.07 |
---|---|
[Java] 객체지향언어? 추상화(Abstraction)와 캡슐화(Encapsulation), 그리고 구조체 (0) | 2021.01.06 |
[Java] 배열의 복사? Shallow Copy(얕은 복사)와 Deep Copy(깊은 복사) (0) | 2020.12.31 |
[Java] 배열(Array)? 배열 선언과 할당, 해쉬코드 (0) | 2020.12.30 |
[Java] 메모리 저장공간(stack과 heap)알아보기 (0) | 2020.12.29 |
댓글