배열

배열이란 같은 유형의 값을 하나의 묶어서 저장하는 것으로 많은 양의 값을 다룰 때 유용합니다. 배열 내부의 요소들은 연속적입니다.

선언과 생성

배열의 경우 처음 선언시 일반적인 변수 선언과 비슷하지만 변수 타입 오른쪽에 대괄호[]를 붙여줍니다. 값을 저장할 공간은 배열 선언시 만들어지는 것이 아니라 배열 생성시 만들어집니다.

int[] arr; // 선언
arr = new int[5]; //생성


초기화 및 확인

변수 초기화와 마찬가지로, 배열에 처음으로 값을 저장하는 것입니다. 배열 내의 각각의 값을 요소라고 하고 각 요소의 고유 번호가 있는데 이를 인덱스라고 합니다.

초기화에 들어가기 앞서 변수 유형별 배열 선언을 살펴봅시다.

public static void main(String[] args) {
	float[] f = new float[3]; // 0.0
	System.out.println(f[0]);
	System.out.println(f[1]);
	System.out.println(f[2]);
		
		
	double[] d = new double[3]; //0.0
	System.out.println(d[0]);
	System.out.println(d[1]);
	System.out.println(d[2]);
		
	boolean[] b = new boolean[3]; //false
	System.out.println(b[0]);
	System.out.println(b[1]);
	System.out.println(b[2]);
		
	String[] str = new String[3]; // null
	System.out.println(str[0]);
	System.out.println(str[1]);
	System.out.println(str[2]);
		
}

배열은 선언만으로도 초기화가 이루어지는 것을 볼 수 있습니다.

다음은 기존 방식과 배열을 이용한 방식을 비교해보겠습니다.

public static void main(String[] args) {
	int sc1 = 83;
	int sc2 = 90;
	int sc3 = 74;
	int sc4 = 78;
	int sc5 = 98;
	int sc6 = 82;
	int sum = 0;
	sum += sc1;
	sum += sc2;
	sum += sc3;
	sum += sc4;
	sum += sc5;
	sum += sc6;
	System.out.println(sum);
		
		
	int[] score = {83, 90, 74, 78, 98, 82};
	sum = 0;
	for (int idx = 0; idx <=4; idx++) {
		sum += score[idx];
	}
	System.out.println(sum);
}

변수 선언과 생성을 값마다 하지 않고 한번에 할 수 있어서 코드가 간결해졌습니다. 배열에서 반복문 사용할 수 있는 이유는 요소 번호가 0부터 1씩 증가하는 값을 가지기 때문입니다.

(+) python에서는 변수명을 지정할 때 globals()와 for문을 통해 각각 다른 변수명을 지정할 수 있지만 자바에서는 되지 않습니다.

다음으로는 5칸의 배열에 100점부터 60점까지 입력해봅시다.

int[] arr = new int[5]; //배열을 만들면 기본값으로 초기화

arr[0] = 100;
arr[1] = 90;
arr[2] = 80;
arr[3] = 70;
arr[4] = 60;
//
for(int i=0;i<5;i++) {
	arr[i] = (10-i) * 10;
}

다음으로 for each문이 있습니다. 배열이 가지고 있는 요소를 하나하나씩 받아오는 반복문입니다. 조건식, 증감식 등을 쓰지 않아도 되는 편리함이 장점입니다.

public class Ex12 {

	public static void main(String[] args) {
		int[] values = {1,2,3,4,5};
		for(int val : values)
			System.out.println(val);
	}

}

배열 안의 모든 요소를 확인할 때 for문을 사용하는 이유는 배열은 참조 자료형이기 때문에 System.out.println();를 이용하여 출력하면 값이 출력되는 것이 아니라 참조 주소값을 출력하기 때문입니다. 해당 내용은 본 블로그 자바(1)에서 볼 수 있습니다.

물론 아래와 같이 다른 클래스를 이용해 문자형태로 출력하면 배열을 볼 수 있습니다.

public class Ex1 {

	public static void main(String[] args) {
		int[] values = {1,2,3,4,5};

		System.out.println(Arrays.toString(i));
    //[1, 2, 3, 4, 5]

	}

}

지금까지 배운 내용들을 토대로 배열을 활용해봅시다. 아래는 스캐너, 배열, 조건/반복문을 이용하여 주사위를 뽑는 횟수를 입력하고 각각의 눈이 몇 번씩 뽑혔는지 알려주는 코드입니다.

import java.util.Scanner;

public class Ex01 {

	public static void main(String[] args) {
		int[] dice;
		int[] count = new int[6];
		
		Scanner sc = new Scanner(System.in);
		System.out.println("주사위 굴릴 횟수 입력 : ");
		int times = sc.nextInt();
		sc.close();
		dice = new int[times];
		
		int i = 0;
		while(i < times) {
			dice[i] = (int)(Math.random() * 6 + 1);
			for (int j = 0; j < 6; j++) {
				if (dice[i] == j + 1) {
					count[j] += 1;
				}
			}
			
			i++;
		}
		
		for (int z = 0; z < 6; z++) {
			System.out.println((z + 1)  + "은(는) " + count[z] + "번 뽑혔습니다.");
		}
		
	}

}


다차원 배열의 선언과 생성

기존에 만든 1차원 배열이 아닌 다차원 배열이 있는데 이를 생성하기 위해서는 원하는 차원 수 만큼 대괄호[]를 붙여줍니다. 배열 안에 있는 배열들끼리는 서로 길이가 같을 필요는 없습니다.

int[][] score = {
				{100, 95, 90},
				{ 20, 20, 20},
				{ 30, 30, 30},
				{ 40, 40, 40}
				};


(+) args

메인 메소드에서 보이던 args는 cmd창에서 java로 해당 클래스를 실행할 때 추가로 입력받는 값입니다.

public static void main(String[] args) {
		
		if(args[0].equals("/?")) {
			System.out.println("도움말입니다.");
		} else if(args[0].equals("+")) {
			System.out.println(Integer.parseInt(args[1])+
							   Integer.parseInt(args[2]));
		} else if(args[0].equals("-")) {
			System.out.println(Integer.parseInt(args[1])-
					   Integer.parseInt(args[2]));
		}


	}

java 파일명 /? 입력시 “도움말입니다”를 출력하고, java 파일명 + 1 2 입력시 3이 출력됩니다.

https://blog.kakaocdn.net/dn/k8flj/btq4J7on5kF/X1ZQ1N3oEAaIfWw2umurW0/img.png