Java의 배열과 다차원 배열
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로 서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
배열을 선언하는 방법은 원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호를 붙이면 된다.
// 타입[] 변수명;
int[] score;
String[] name;
// 타입 변수명[];
int score[];
String name[];
배열을 선언하는 것은 단지 생성된 배열을 다루기 위한 참조변수의 공간이 만들어진 것이고 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어진다. 배열을 생성하기 위해서는 연산자 new
와 함께 배열의 타입과 길이를 지정해 주면된다.
// 타입[] 변수명;
int[] score; // 배열을 선언(배열을 다루기 위한 참조변수 선언)
// 변수명 = new 타입[길이];
score = new int[5]; // 배열을 생성(실제 저장공간을 생성)
// 타입[] 변수명 = new 타입[길이];
int[] score = new int[5]; // 배열의 선언과 생성을 동시에
위의 코드가 실행되어 생성된 배열을 그림으로 나타내면 다음과 같다.
그림에서 알 수 있듯이, 변수와 달리 배열은 각 저장공간이 연속적으로 배치되어 있다는 특징이 있다.
인덱스(index)란 우선 책 속의 내용 중에서 중요한 단어나 항목, 인명 따위를 쉽게 찾아볼 수 있도록 일정한 순서에 따라 별도로 배열하여 놓은 목록을 뜻한다. 생성된 배열의 각 저장공간을 ‘배열의 요소(element)’라고 하며 배열에서 인덱스는 이런 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다. 다만 인덱스는 1이 아닌 0부터 시작한다.
배열은 한번 생성하면 길이를 변경할 수 없기 때문에 이미 생성된 배열의 길이는 변하지 않는다. 만약 배열의 유효 범위를 벗어난 값을 참조하려고 하면 ArrayIndexOutOfBoundsException
이라는 에러가 발생하여 프로그램이 비정상적으로 종료될 것이다.
배열은 생성과 동시에 자동적으로 기본값으로 초기화되므로 사용하기 전에 따로 초기화를 해주지 않아도 되지만, 원하는 값을 저장하려면 각 요소마다 값을 지정해 주어야한다. 배열의 생성과 초기화를 동시에 할 수도 있는데, 저장할 값들을 중괄호 안에 쉼표로 구분해서 나열하면 중괄호 안의 값의 개수에 의해 배열의 길이가 자동으로 결정되기 때문에 배열의 길이를 따로 적지 않아도 된다.
int[] score = new int[5]; // 길이가 5인 int형 배열 생성
score[0] = 50; // 각 요소에 직접 값을 저장
score[1] = 60;
score[2] = 70;
score[3] = 80;
score[4] = 90;
// 배열의 생성과 초기화를 동시에
int[] score = new int[]{50, 60, 70, 80, 90};
// new int[] 생략
int[] score = {50, 60, 70, 80, 90};
앞서 언급한 배열은 모두 1차원 배열이다. 2차원 이상의 배열, 즉 다차원 배열도 선언해서 사용할 수 있다. 2차원 배열은 주로 표 형태의 데이터를 담는데 사용된다.
타입[][] 변수명 = new 타입[길이][길이];
타입 변수명[][] = new 타입[길이][길이];
타입[] 변수명[] = new 타입[길이][길이];
예시
int[][] score = new int[3][4]; // 3행 2열의 2차원 배열을 생성한다.
타입[][] 변수명 = new int[길이][길이]{ {...}, {...}};
타입[][] 변수명 = { {...}, {...} };
예시
int[][] array = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};