[자바] 배열에 관한 공부

heegon·2025년 6월 26일

JAVA

목록 보기
7/20

배열의 기본 개념 정리

동일한 데이터 타입을 메모리에 순차적으로 확보하기 위해 사용.
래퍼런스 타입으로 new 키워드를 사용한다.
메모리를 효율적으로 관리하고 일괄 처리를 위해 사용한다.
배열은 메모리의 heap 영역에 할당되며, 초기화를 하지 않아도 자동으로 진행된다.
(반면 변수는 메모리의 stack 영역에 할당되며, 초기화가 반드시 필요하다.)


1차원 배열

int[] arr; //int 배열에 접근할 수 있는 래퍼런스 변수
arr = new int[4]; 
//int 자료형 4개를 담을 수 있는 배열 객체를 만들고, arr 이름을 가진 래퍼런스 변수로 해당 배열에 접근 가능. 
		
for(int i=0; i<arr.length; i++) {
	System.out.println(arr[i]);
}
///배열은 메모리의 heap 영역을 사용하기 때문에 초기화가 자동으로 진행된다. 따라서 0 0 0 0 을 출력한다. 
///반면, 변수는 메모리의 스택 영역을 사용하기 때문에 초기화가 반드시 필요하다. 초기화 하지 않으면 오류가 발생한다. 

2차원 배열

2차원 배열의 기본 형태

int [][] arr = new arr[2][3]; //2행 3열 형태의 2차원 배열 선언

2차원 배열의 메모리 구조

2차원 혹은 3차원과 같이 다차원 배열을 만들어도, 무조건 1차원 배열 형태로 메모리에 공간을 할당하는 C언어의 배열과 달리, 자바에서의 배열은 위 이미지와 같이 2차원 배열의 경우 int [][] arr = new int [2][3] 다음과 같이 2행 3열일 때, 2행을 기준으로 메모리 공간을 할당하고, arr[0] 1행의 메모리가 3열의 공간을 할당받은 메모리 공간을 참조하는 래퍼런스 변수가 되고, arr[1] 2행의 메모리 또한 3열의 공간을 할당받은 메모리 공간을 참조하는 래퍼런스 변수가 된다.

따라서, 2차원 배열을 만들되 첫 번째 행에는 5개의 열을 갖고 두 번째 행에는 8개. 이런 식으로 서로 다른 갯수의 행을 가지는 2차원 배열 또한 만들 수 있다. 코드는 아래와 같다.

int [][] arr2 = new int[2][]
arr2[0] = new int[5]
arr2[1] = new int[8]

2차원배열 메모리구조

2차원 배열 공부용 코드

public class Main {

	public static void main(String[] args) {
	
		int[][] arr2 = new int[2][];
		arr2[0] = new int[4];
		arr2[1] = new int[15];
		
		for(int i=0; i<arr2.length; i++) {
			for(int j=0; j<arr2[i].length; j++) {
				System.out.println(i + "행 " + j + "열, >>" + arr2[i][j]);
			}
		}

	}

}

실행 결과

import java.util.Scanner;

public class Array {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		System.out.println("2차원 배열에서 행으로 사용할 배열의 갯수 입력 >> ");
		int input1 = sc.nextInt();
		System.out.println("2차원 배열에서 열로 사용할 배열의 갯수 입력 >> ");
		int input2 = sc.nextInt();
		int [][] num = new int[input1][input2];
		
		System.out.println("배열의 총 저장 공간 갯수는 " + num.length + " 개 입니다.");
		System.out.println("스페이스바를 간격으로 총 배열 갯수만큼 정수 값 입력 >> ");
		for(int i=0; i<num.length; i++) {
			for(int j = 0; j<num[i].length; j++) {
				num[i][j] = sc.nextInt();
			}
		}
		
		for(int i=0; i<num.length; i++) {
			for(int j = 0; j<num[i].length; j++) {
				System.out.println("2차원 배열 num의 " + i + "행 " + j + " 열 의 값은 "+ num[i][j] + "입니다.");
			}
		}
		
		sc.close();

	}

}

코드 실행 결과


3차원 배열

  • 면, 행, 열의 갯수가 모두 같은 3차원 배열에 값을 넣고, 출력하는 기본적인 코드 형태.
import java.util.Scanner;

public class ThirdClass {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("3차원 배열에서 사용할 면의 갯수 입력 >> ");
		int num1 = sc.nextInt();
		System.out.println("3차원 배열에서 사용할 행의 갯수 입력 >> ");
		int num2 = sc.nextInt();
		System.out.println("3차원 배열에서 사용할 열의 갯수 입력 >> ");
		int num3 = sc.nextInt();
		//3차원 배열 선언
		int arr[][][] = new int[num1][num2][num3];
		
		//3차원 배열에 값 입력
		for(int i = 0; i<arr.length; i++) {
			for (int j = 0; j<arr[i].length; j++) {
				for (int k = 0; k<arr[i][j].length; k++) {
					System.out.println("정수 입력");
					arr[i][j][k] = sc.nextInt();
				}
			}
		}
		
		//3차원 배열 출력
		for(int i = 0; i<arr.length; i++) {
			for (int j = 0; j<arr[i].length; j++) {
				for (int k = 0; k<arr[i][j].length; k++) {
					System.out.println(i + "면 " + j + "행 " + k + "열 " + arr[i][j][k]);
				}
			}
		}
		
		sc.close();

	}

}

객체 배열

String[] s = new String[3];
s[0] = new String("Hi");
s[1] = new String("Hello");
s[2] = new String("bye");

다음과 같이 객체(문자열)의 배열도 만들어 사용이 가능하다.

profile
❤️

0개의 댓글