Programing Language/Java

[Java] 다차원 배열(Multi-dimensional Arrays)

vinedpillar 2022. 6. 2. 22:01

다차원 배열

  • 배열 안에 또 다른 배열이 대입되는 것을 다차원 배열이라고 합니다.

  • 배열 내부에 대입된 배열이 많아질수록 배열의 차원이 증가하여 n차원 배열으라고 부릅니다.

  • 다차원 배열의 구조
다차원 배열

// 중괄호([])가 붙는 숫자에 따라 배열의 차원을 설정할 수 있음
// 2차원 배열
타입[][] 변수 = {
    // 1차원 배열의 0번 인덱스의 배열값
    {a1, a2, ... an}, 
    // 1차월 배열의 1번 인덱스의 배열값
    {b1, b2, ... bn}
};


// 3차원 배열
타입[][][] 변수 = {
	// 1차원 배열의 0번 인덱스
    {
    	// 2차원 배열의 0번 인덱스의 배열값
        {a1, a2, ... an}, 
        // 2차원 배열의 1번 인덱스의 배열값
        {b1, b2, ... bn}}, 
        ...
    },
    
    ...
    
    {        
        {n1, n2 ... nn}, 
        {m1, m2 ... mn}, 
        ...
    }
};

 

  • 다차원 배열의 메모리 구조

 

 

 

 

다차원 배열의 생성

  • 다차원 배열 역시 일반저인 1차원 배열과 마찬가지로 여러가지 방법으로 배열을 생성할 수 있습니다. 

  • 값 목록을 직접 대입하여 배열 생성
값 목록 대입을 통한 다차원 배열 생성 방법

// 뒤에 대입되는 값의 수에 따라 배열 크기 설정
타입[][] 변수명 = {
    {값1, 값2, ... 값n},
    {값1, 값2, ... 값n},
    ...
}

 

  • new 연산자를 활용하여 배열 생성
new 연산자를 통한 다차원 배열 생성 방법

// 배열 선언 시 모든 차원의 배열 수 결정
// 이 경우 익덱스 별로 생성되는 하위 차원의 배열 크기가 같아짐
타입[][] 변수명 = new 타입[1차원 배열 크기][2차원 배열 크기];

// 배열 선언 후 하위 차원의 배열 수 지정
// 이 경우 각 인덱스에 다른 크기의 배열 삽입 가능
타입[][] 변수명 = new 타입[1차원 배열 크기][];
// 1차원 배열의 0번 인덱스의 배열 크기 지정
변수명[0] = new 타입[2차원 배열 크기];
// 2차원 배열의 n번 인덱스의 배열 크기 지정
변수명[n] = new 타입[2차원 배열 크기];

 

 

 

 

반복문을 활용한 다차원배열 내부 값 확인

  • 다차원 배열에서의 내부 값을 확인하기 위해서는 이중 반복문을 활용하여 확인할 수 있습니다.
다차원 배열 내부 값을 확인하는 예시 코드

public class MultidimensionalArraysExample {
    public static void main(String[] args) {
    	// 2차원 배열 생성
        // 5명의 학생의 국영수 성적을 저장하는 배열
        int[][] studentsScore = new int[5][3];
        
        // 배열에 성적을 입력
        int[0][0] = 93;
        int[0][1] = 89;
        int[0][2] = 72;
        int[1][0] = 79;
        int[1][1] = 88;
        int[1][2] = 90;
        int[2][0] = 84;
        int[2][1] = 68;
        int[2][2] = 79;
        int[3][0] = 53;
        int[3][1] = 47;
        int[3][2] = 61;
        int[4][0] = 80;
        int[4][1] = 77;
        int[4][2] = 91;
        
        // 5명 학생의 영어 성적의 평균 점수
        // 이중 반복문을 활용하여 2차원 배열의 2번째 점수를 저장
        int totalEngScore = 0;
        double averageEngScore = 0.0;
        for(int i = 0; i < studentsScore.length; i++) {
        	for(int j = 0; j < studentsScore[i].length; j++) {
                if(j == 1) {
                	totalEngScore += studentsScore[i][j];
                }
            }
        }
        
        // 소수점까지 표현하기 위해 자료형을 실수형으로 변환
        averageEngScore = (double)totalEngScore / (double)studentsScore.length;
        // 다섯 학생의 평균 영어 점수는 74.0점 입니다. 출력
        System.out.println("다섯 학생의 평균 영어 점수는 " + averageEngScore + "점 입니다.");
        
        // 3번째 학생의 평균 점수 
        // 배열의 위치가 고정되었다는 점을 활용하여 반복문을 한번만 사용
        int totalThirdStudentScore = 0;
        double averageThirdStudentScore = 0.0;
        for(int i = 0; i < studentsScore[2].length; i++) {
        	totalThirdStudentScore += studentsScore[2][i];
        }
        
        // 소수점까지 표현하기 위해 자료형을 실수형으로 변환
        averageThirdStudentScore = (double)totalThirdStudentScore / (double)studentsScore[2].length;
        // 셋째 학생의 평균 성적은 77.66666666666667점 입니다. 출력
        System.out.println("셋째 학생의 평균 성적은 " + averageThirdStudentScore + "점 입니다.");       
    }
}

 

 

 

 

참조 자료형의 배열

  • 2차원 배열과 유사한 구조로 참조 자료형도 배열로 생성할 수 있습니다.

  • 단 참조 자료형은 객체(인스턴스)를 생성해야 활용할 수 있기 때문에 배열에 데이터를 넣을 때 new 키워드를 활용해야 합니다.
객체 배열을 생헝하는 예시

// 참조 타입인 String의 배열을 생성하는 예시
// String은 참조 타입 중 다소 독특한 특징을 가지고 있어 예시에는 꼭 맞지 않을 수 있음
String[] strarr = new String[5];

strarr[0] = new String("apple");
strarr[1] = new String("grape");
strarr[2] = new String("banana");
strarr[3] = new String("plum");
strarr[4] = new String("orange");

// String 타입이 아니고 다른 참조 객체일 경우 메모리 객체의 주소값이 출력됨
// apple, grape, banana, plum, orange, 출력
for(int i = 0; i < strarr.length; i++) {
	System.out.print(strarr[i] + ", ");
}