
학생의 점수를 출력하는 간단한 프로그램을 작성해보자
package array;
public class Array1 {
public static void main(String[] args) {
int student1 = 90;
int student2 = 80;
int student3 = 70;
int student4 = 60;
int student5 = 50;
System.out.println("학생1 점수: " + student1);
System.out.println("학생2 점수: " + student2);
System.out.println("학생3 점수: " + student3);
System.out.println("학생4 점수: " + student4);
System.out.println("학생5 점수: " + student5);
}
}
실행 결과로는 학생1,학생2,학생3,학생4,학생 5의 점수가 출력이 될것이다.
이렇게 변수를 지정을 해서 한명 한명 출력을 해도 되지만, 학생을 수백명 이상 추가해야한다면 코드가 많이 늘어나게될것이다.
이렇게 같은 타입의 변수를 반복해서 선언하고 반복해서 사용하는 문제를 해결하는 것이 바로 배열이다.
배열은 같은 타입의 변수를 사용하기 편하게 하나로 묶어둔 것이다. 위의 코드를 배열을 사용하도록 변경해보자.
package array;
public class Array1Ref1 {
public static void main(String[] args) {
int[] students; //배열 변수 선언
students = new int[5]; //배열 생성
//변수 값 대입
students[0] = 90
students[1] = 80;
students[2] = 70;
students[3] = 60;
students[4] = 50;
//변수 값 사용
System.out.println("학생1 점수: " + students[0]);
System.out.println("학생2 점수: " + students[1]);
System.out.println("학생3 점수: " + students[2]);
System.out.println("학생4 점수: " + students[3]);
System.out.println("학생5 점수: " + students[4]);
}
}
int[] students; //배열 변수 선언
int[] students;와 같이 배열 변수를 선언해야한다.[]가 들어간다는 점이다.students = new int[5]; //배열 생성
배열을 사용하려면 배열을 생성해야한다.

new int[5]라고 코드를 작성하면 위의 그림과 같이 총 5개의 int형 변수가 만들어진다.
new는 새로 생성한다는 뜻이고, int[5]는 int형 변수 5개라는 뜻이다. 따라서 int형 변수 5개를 다룰 수 있는 배열을 새로 만든다는 뜻이다.
앞서 int student,int student2 ...int student5까지 총 5개의 변수를 직접 선언했는데 이를 배열을 사용하면 한번에 깔끔하게 처리할 수 있다.
new int[5]라고 코드를 작성하면 배열의 길이가 5인 int형 배열이 만들어진다. 자바는 배열을 생성할 때 그 내부값을 자동으로 초기화한다.0,bollean은 false,String은 null로 초기화 된다.배열은 변수와 사용법이 비슷한데 , 차이점이 있다면 다음과 같이 []안에 숫자 번호를 넣어주면 된다.
배열의 위치를 나타내는 숫자를 인덱스(index)라고 한다.
위의 코드의 배열 참조 그림

배열은 0부터 시작한다.
new int[5]와 같이 5개의 요소를 가지는 int형 배열을 만드면 인덱스는 0,1,2,3,4가 존재한다.
여기서 주의해야할 점이 있는데 인덱스는 0부터 시작한다는 것이다. 따라서 사용 가능한 인덱스의 범위는 0 ~ (n-1)이 된다. 그래서 위 배열에서 마지막 요소는 students[4]가 되는 것이다.
만약 students[5]와 같이 접근 가능한 배열의 인덱스 범위를 넘어가면 다음과 같은 오류가 발생한다.
인덱스 허용 범위를 넘어설때 발생하는 오류
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out
of bounds for length 5 at array.Array1Ref1.main(Array1Ref1.java:14)
자바의 변수 데이터 타입을 가장 크게 보면 기본형과 참조형으로 분류할 수 있다.
int, long, double, boolean 등등 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라고 한다.int[] students와 같이 데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형이라 한다. 객체나 클래스를 담을 수 있는 변수들도 모두 참조형이다.리팩토링 : 리팩토링은 기존의 코드 기능은 유지하면서 내부 구조를 개선하여 가독성을 높이고, 유지보수를 용이하게 하는 과정을 뜻한다. 이는 중복을 제거하고, 복잡성을 줄이며, 이해하기 쉬운 코드로 만들기 위해 수행된다.
이제 위의 코드를 리팩토링 해보자.
package array;
public class Array1Ref4 {
public static void main(String[] args) {
// 배열 생성 간략 버전, 배열 선언과 함께 사용시 new int[] 생략 가능
int[] students = {90, 80, 70, 60, 50};
for (int i = 0; i < students.length; i++) {//for문으로 출력문 반복
System.out.println("학생" + (i + 1) + " 점수: " + students[i]);
}
}
}
위의 코드에서 사용한 배열을 1차원 배열이라한다.
2차원 배열은 행과 열로 구성된다.

2차원 배열은 int[][] arr = new int[2][3]과 같이 선언하고 생성한다. 그리고 arr[1][2]와 같이 사용하는데, arr[행][열]이라고 생각하면 된다.
그림의 2차원 배열 데이터
arr[0][0]: 1arr[0][1]: 2arr[0][2]: 3arr[1][0]: 4arr[1][1]: 5arr[1][2]: 6코드를 통해서 2차원 배열의 사용법을 알아보자.
package array;
public class ArrayDi0 {
public static void main(String[] args) {
// 2x3 2차원 배열을 만든다.
int[][] arr = new int[2][3]; //행(row), 열(column)
arr[0][0] = 1; //0행, 0열
arr[0][1] = 2; //0행, 1열
arr[0][2] = 3; //0행, 2열
arr[1][0] = 4; //1행, 0열
arr[1][1] = 5; //1행, 1열
arr[1][2] = 6; //1행, 2열
//0행 출력
System.out.print(arr[0][0] + " "); //0열 출력
System.out.print(arr[0][1] + " "); //1열 출력
System.out.print(arr[0][2] + " "); //2열 출력
System.out.println(); //한 행이 끝나면 라인을 변경한다.
//1행 출력
System.out.print(arr[1][0] + " "); //0열 출력
System.out.print(arr[1][1] + " "); //1열 출력
System.out.print(arr[1][2] + " "); //2열 출력
System.out.println(); //한 행이 끝나면 라인을 변경한다.
}
}
package array;
public class ArrayDi4 {
public static void main(String[] args) {
int[][] arr = new int[2][3];// 배열 생성 및 초기화
int i = 1; //변수 선언
// 2중 for 문을 사용하여 배열의 각요소에 1씩 증가하는 값을 입력한다.
//외부 루프 문은 행을, 내부 루프는 열을 순회한다.
// arr.length는 행의 길이를 뜻한다. 여기서는 2가 행의 길이이다.
// arr[row].length는 열의 길이를 뜻한다. 여기서는 3이 열의 길이이다.
for (int row = 0; row < arr.length; row++) {
for (int column = 0; column < arr[row].length; column++) {
arr[row][column] = i++;
}
}
// 2중 for 문을 사용하여 배열의 값을 출력한다.
//외부 루프는 행을, 내부 루프는 열을 순회하며 각 값을 출력한다.
// 각 행이 끝날 때마다 System.out.println()을 호출하여 줄바꿈을 한다.
for (int row = 0; row < arr.length; row++) {
for (int column = 0; column < arr[row].length; column++) {
System.out.print(arr[row][column] + " ");
}
System.out.println();
}
}
}
출력 결과
1 2 3
4 5 6
향상된 for문은 배열을 사용할 때 기존 for문보다 더 편리하게 사용할 수 있다.
향상된 for문 정의
for(변수 : 배열 또는 컬렉션){
// 배열 또는 컬렉션의 요소를 순회하면서 수행할 작업
}
이 글의 내용은 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음의 PDF 강의 교안을 토대로 작성되었습니다.