다차원 배열
- 배열 안에 또 다른 배열이 대입되는 것을 다차원 배열이라고 합니다.
- 배열 내부에 대입된 배열이 많아질수록 배열의 차원이 증가하여 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] + ", ");
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 인스턴스의 생성과 활용(Create & Using Instance) (0) | 2022.06.10 |
---|---|
[Java] 오브젝트와 클래스(Object & Class) (0) | 2022.06.02 |
[Java] 자바의 배열(Arrays) (0) | 2022.05.26 |
[Java] 자바 프로그램 기본 실행 과정(Java Program Basic Runtime) (0) | 2022.05.22 |
[Java] 자바 기본 문법(Java Basic Syntax) (0) | 2022.05.19 |