다차원 배열(Dimensional Array)

Joy🌱·2022년 12월 29일
0

☕ Java

목록 보기
12/40
post-thumbnail

💁‍♀️ 다차원 배열(Dimensional Array)이란,
다차원 배열은 2차원 이상의 배열을 의미하며, 배열의 인덱스마다 또 다른 배열의 주소를 보관하는 배열
즉, 2차원 배열은 1차원 배열 여러 개를 하나로 묶어서 관리


👀 배열의 선언 및 할당

1) 배열의 주소를 보관할 레퍼런스 변수 선언 (stack)

int[][] iarr1;
int iarr2[][];
int[] iarr3[];
>>> 모두 가능

2) 여러 개의 1차원 배열의 주소를 관리하는 배열을 생성 (heap)

>>> 배열의 주소를 관리하는 배열의 길이는 앞 부분에 정수형으로 표기하며 반드시 크기를 지정해줘야함
//	iarr1 = new int[][]; 
	>>> 크기를 지정하지않으면 에러 발생
//	iarr1 = new int[][4]; 
	>>> 주소를 묶어서 관리할 배열의 크기를 지정하지 않으면 에러 발생
	iarr1 = new int[3][];
    >>> 관리할 배열이 총 3

3) 주소를 관리하는 배열의 인덱스마다 배열을 할당 (heap)

iarr1[0] = new int[5];
iarr1[1] = new int[5];
iarr1[2] = new int[5];

🙋‍ 잠깐! 2차원 배열의 생성 및 할당을 동시에 할 수 있을까?

[1] 정변 배열

>> 관리하는 '여러 개의 배열의 길이가 동일한 경우' 아래와 같이 한 번에 할당 가능
iarr2 = new int[3][5];

[2] 가변 배열

>> 여러 개의 배열의 길이가 각각 다른 경우 위에서 했던 방식처럼 인덱스별로 배열을 따로 할당
>> 정변 배열 방식 불가능
iarr2[0] = new int[5];
iarr2[1] = new int[10];
iarr2[2] = new int[3]; 

4) 각 배열의 인덱스에 차례로 접근해서 값 출력

[1] 배열 하나씩 값 출력

>>> 0번 인덱스의 배열 값 출력
for(int i = 0; i < iarr1[0].length; i++) {
// iarr1[0].length : iarr1(레퍼런스 배열)의 0번 인덱스가 맡고있는 1차원 배열의 길이
	System.out.print(iarr1[0][i] + " "); 
}
		
System.out.println();
		
>>> 1번 인덱스의 배열 값 출력
for(int i = 0; i < iarr1[1].length; i++) {
// iarr1[1].length : iarr1(레퍼런스 배열)의 1번 인덱스가 맡고있는 1차원 배열의 길이
	System.out.print(iarr1[1][i] + " "); 
}
		
System.out.println();
		
>>> 2번 인덱스의 배열 값 출력
for(int i = 0; i < iarr1[2].length; i++) {
// iarr1[2].length : iarr1(레퍼런스 배열)의 2번 인덱스가 맡고있는 1차원 배열의 길이
	System.out.print(iarr1[2][i] + " "); 
}
		
System.out.println();

[2] 중첩 for문을 이용해서 배열의 값 출력 🔥중요🔥

for(int i = 0; i < iarr1.length; i++) {
		
	for(int j = 0; j < iarr1[i].length; j++) {
		System.out.print(iarr1[i][j] + " ");
	}
	System.out.println();
}

👀 2차원 정변 배열

정변 배열의 경우, 선언과 동시에 모든 배열을 할당할 수 있음
자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][할당할 배열의 길이]

int[][] iarr = new int[3][5];
		
// 각 배열의 인덱스에 접근해서 값 대입 후 출력 (예시)
// 1 2 3 4 5
// 6 7 8 9 10
// 11 12 13 14 15
		
int value = 1;
		
for(int i = 0; i < iarr.length; i++) {
	for(int j = 0; j < iarr[i].length; j++) {
		iarr[i][j] = value++; 
        >>> 연산자의 우선순위에 따라 value의 값은 대입된 후 증가됨
	}
}
		
>>> 값 출력
for(int i = 0; i < iarr.length; i++) {
			
	for(int j = 0; j < iarr[i].length; j++) {
		System.out.print(iarr[i][j] + " ");
	}
	System.out.println();
}

👀 2차원 가변 배열

가변 배열의 경우, 선언과 동시에 모든 배열을 할당할 수 없으며, 할당할 배열의 갯수만 지정하고 각 인덱스에 서로 다른 길이의 배열을 따로 할당해야함
자료형[][] 변수명 = new 자료형[할당할 배열의 갯수][];
변수명[배열 인덱스] = new 자료형[배열의 길이]

>>> '주소를 관리하는 배열'의 주소를 보관하기 위한 변수 선언
	int[][] iarr = new int[3][];
		
>>> 주소를 관리하는 배열의 각 인덱스마다 배열을 할당하여 주소값 대입
	iarr[0] = new int[3];
//	iarr[1] = new char[2]; >>> 자료형이 다른 배열은 하나로 묶어서 관리할 수 없다.
	iarr[1] = new int[2];
		
	int[] arr = new int[5];
	iarr[2] = arr; >>> 미리 할당해둔 배열을 이용해서도 가능
    
		
>>> 각 배열의 인덱스마다 접근하여 값 대입 후 출력 

>>> 값 대입 
	iarr[0][0] = 1;
	iarr[0][1] = 2;
	iarr[0][2] = 3;
//	iarr[0][3] = 4; 
>>> 위에서 iarr행을 3까지만 만들었으므로 오류 (공간이 만들어지지않음) 
>>>	java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 오류 발생
		
	iarr[1][0] = 4;
	iarr[1][1] = 5;
		
	iarr[2][0] = 6;
	iarr[2][1] = 7;
	iarr[2][2] = 8;
	iarr[2][3] = 9;
	iarr[2][4] = 10;
    >>> iarr[2]가 선언되지 않은 뒤, 이 문장을 실행하면 java.lang.NullPointerException 오류 발생 
    >>> (2번 인덱스에 배열이 할당되어있지 않다면 null 오류 발생)
		
//	iarr[3][0] = 11;
	>>> java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 오류 발생
		
>>> 가변 배열 역시 반복문을 이용해서 값을 대입하고 출력할 수 있다. */
	for(int i = 0; i < iarr.length; i++) {
			
		for(int j = 0; j < iarr[i].length; j++) {
			System.out.print(iarr[i][j] + " ");
		}
		System.out.println();
	}

👀 선언과 할당을 하며 초기화

1) 정변배열

int[][] iarr = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};
		
for(int i = 0; i < iarr.length; i++) {
			
	for(int j = 0; j < iarr[i].length; j++) {
		System.out.print(iarr[i][j] + " "); 
        >>>" "의 역할은 그저 숫자 사이의 띄어쓰기 용도
	}
	System.out.println();
}

2) 가변배열

int[][] iarr2 = {{1, 2, 3}, {4, 5}, {6, 7, 8, 9, 10}};
		
for(int i = 0; i < iarr2.length; i++) {
			
	for(int j = 0; j < iarr2[i].length; j++) {
		System.out.print(iarr2[i][j] + " ");
	}
	System.out.println();
}

3) 미리 할당된 배열을 이용하는 방식

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {6, 7, 8, 9, 10};
int[][] arr3 = {arr1, arr2};
		
for(int i = 0; i < arr3.length; i++) {
			
	for(int j = 0; j < arr3[i].length; j++) {
		System.out.print(arr3[i][j] + " ");
	}
	System.out.println();
}
profile
Tiny little habits make me

0개의 댓글

관련 채용 정보