▸JAVA/기본 문법

2차원배열_생성/초기화/사이즈변경/출력 [2/2]

코데방 2019. 12. 10.
728x90

2차원 배열도 1차원 배열과 마찬가지고 C언어의 사용법과 크게 다른 점은 없습니다. 하지만 약간 다른점이 있어서 간단히 정리해보겠습니다.

 


 

일단 기본적인 형태의 2차원 배열은 아래와 같이 작성하면 됩니다. 추가로 Java에서는 행과 열을 배열.length로 따로 구해줄 수 있어서 편리하게 사용이 가능합니다.

 

package study.first;

public class Main {

	public static void main(String[] args) {
	
		int[][] arr = {{0,1,2},{3,4,5}};
		
		for(int i = 0; i < arr.length; i++) {
			
			for(int j = 0; j < arr[i].length; j++) { 
				System.out.print(arr[i][j] + " ");
			}
			
			System.out.println("");
		}
	}
}

 


 

다차원 배열의 길이를 다르게 만들어서 사용도 가능합니다. C언어에서도 포인터 배열을 사용해서 가능하긴 하지만 반복문으로 순회하기가 매우 까다로워집니다. 하지만 위의 행과 열을 구하는 length를 통해 이상하게 생긴 다차원 배열도 순회가 쉬워졌습니다. 실제 메모리 구조는 C언어에서 포인터로 만들어주는 방식으로 작동합니다. 각 행들에 연결된 데이터는 실제로 분산되어 저장돼 있습니다.

 

 

또한 C언어에서는 arr[ ][10]과 같이 다차원 배열에서 열은 무조건 넣고 행을 생략해도 되지만 Java에서는 반대로 arr[10][ ] 과 같이 행은 무조건 넣고 열은 생략해도 됩니다. 이런 배열은 아래와 같이 쓸 수 있습니다. 초기화하는 방식은 본인 마음입니다(1편 참조). 그리고 항상 new로 객체를 생성해주는 작업은 malloc으로 힙 영역 공간을 동적할당 받고 포인터 변수를 하나 받아오는 작업과 동일하다고 생각하면 됩니다.

 

package study.first;

public class Main {

	public static void main(String[] args) {
	
		int[][] arr = new int[3][];
		
		// 행의 열 갯수 지정해서 객체 삽입
		arr[0] = new int[] {0,1,2,3,4};
		arr[1] = new int[] {5,6};
		arr[2] = new int[] {7,8,9,10,11,12,13,14,15,16};
		
		
		for(int i = 0; i < arr.length; i++) {
			
			for(int j = 0; j < arr[i].length; j++) { 
				System.out.print(arr[i][j] + " ");
			}
			
			System.out.println("");
		}
	}
}

 


 

위의 로직을 이해하면 다차원 배열의 사이즈 변경도 간단합니다. 행을 늘리고 싶다면 행 역할을 할 배열을 새로 만들어서 값을 복사해서 붙여넣어주고, 새로운 열에 대한 배열을 추가해주면 됩니다. 그리고 새로 만든 arr2의 주소를 arr에 넣어주면 기존 배열 공간은 참조변수를 잃게 되어 GC가 처리해 줍니다.

 

 

 

반대로 열의 배열 사이즈를 바꾸고 싶다면 역시 새로운 배열 하나를 생성한 뒤 행 배열의 주소값을 바꿔주면 됩니다. 참조를 잃은 기존 배열은 GC가 쓰레기 처리합니다.

 

 

package study.first;

public class Main {

	public static void main(String[] args) {

		int[][] arr = new int[3][];

		// 행의 열 갯수 지정해서 객체 삽입
		arr[0] = new int[] { 0, 1, 2, 3, 4 };
		arr[1] = new int[] { 5, 6 };
		arr[2] = new int[] { 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };

		for (int i = 0; i < arr.length; i++) {

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

			System.out.println("");
		}

		
		// 2번째 열 사이즈 변경
		int[] temp = new int[] { 5, 6, 7, 8, 9 };
		arr[1] = temp;
		
		System.out.println("");
		for (int i = 0; i < arr.length; i++) {

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

			System.out.println("");
		}
	}
}
728x90

댓글

💲 추천 글