같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
🔸 장점
같은 타입의 여러 개의 변수를 하나의 변수에 저장이 가능하므로 ➡️ 코드가 줄어들고 데이터 관리가 편해짐
🔸 단점
배열의 선언 시에 크기를 정해야 함. ➡️ 정해진 크기는 변경, 추가, 삭제 불가능
타입[] 변수이름;
타입 변수이름[];int[] age; int age[];
타입[] 변수이름; (선언)
변수이름 = new 타입[배열의 길이]; (생성)배열의 선언 후에는 반드시 생성을 해야 한다.
선언은 배열을 다루기 위한 참조변수의 공간이 만들어진 것이고, 생성을 해야 값을 저장할 수 있는 공간이 만들어 지는 것이다.int[] score = new int[5];
생성된 배열의 저장공간들을 배열의 요소라고 하고, 각 배열의 요소에 접근할 때는 배열요소[인덱스]의 형식으로 접근한다.
🔸 인덱스 : 배열의 요소마다 붙여진 일련번호
🔸 인덱스의 범위 : 0 ~ 배열의 길이-1 (배열의 길이가 5라면 인덱스는 0 ~ 4까지)
인덱스의 범위를 벗어난 인덱스를 사용한다면 ArrayIndexOutOfBoundsException이 발생한다.
🔸 배열이름.length 를 통해서 배열의 길이를 쉽게 알 수 있다.
(배열은 한 번 생성하고 나면 길이를 변경할 수 없기 때문에 배열이름.length는 상수)
생성과 동시에 타입에 해당하는 기본값으로 초기화되기 때문에 따로 초기화를 하지 않아도 된다.
하지만 원하는 값을 저장하기 위해서는 각 요소에 값을 지정해 줘야한다.
🔸초기화 방법 3가지int[] score = new int[5]; for(int i = 0; i < score.length; i++){ score[i] = i * 10 + 50; } // 일정한 규칙이 있어야 사용 가능한 방법
int[] score = new int[]{50, 60, 70, 80, 90}; int[] score = {50, 60, 70, 80, 90};
int[] score; score = new int[]{50, 60, 70, 80, 90}; // new int[] 생략 불가
int[] arr = {100, 40, 50, 80, 75}; for(int i = 0; i < arr.length; i++){ System.out.println(arr[i] + " "); }
int[] arr = {100, 40, 50, 80, 75}; System.out.println(Arrays.toString(arr)); // 타입@주소의 형식으로 출력된다.
배열은 한 번 생성하면 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하면 더 큰 배열을 새로 만들고 복사해야 한다.
int[] arr = new int[5]; int[] tmp = new int[arr.length * 2]; for(int i = 0; i < arr.length; i++){ tmp[i] = arr[i]; } arr = tmp;
int[] arr = new int[5]; int[] tmp = new int[arr.length * 2]; System.arrayCopy(arr, 0, tmp, 0, arr.length); // arr[0]에서, tmp[0]으로, arr.length개 배열 복사 arr = tmp;
String타입 배열의 생성, 선언, 초기화도 기본형 타입의 배열과 동일하다.
String[] name = new String[5]; String[] name = {"Kim", "Lee", "Park", "Choi", "Cho"} // new String[] 생략가능
🔸 참조형 타입의 배열은 실제 데이터가 아닌 객체의 주소가 저장된다. (이러한 참조형 배열을 객체배열이라고 한다.)
🔸 선언
타입[][] 변수이름;
타입 변수이름[][];
타입[] 변수이름[];int[][] score; int score[][]; int[] score[];
🔸 초기화 : 1차원 배열과 같이 {}를 사용하여 생성 및 초기화한다. 단, {}를 한 번 더 써서 행을 구분해준다.
int[][] arr = new int[][]{1, 2, 3}, {4, 5, 6}; int[][] arr = { {1, 2, 3}, {4, 5, 6} };
int[][] score = new int[5][3]; int[][] score = new int[5][]; score[0] = new int[3]; score[1] = new int[5]; score[2] = new int[2]; score[3] = new int[3]; score[4] = new int[6]; int[][] score = { {100, 100, 90}, {65, 90, 70, 85, 90}, {95, 90}, {65, 75, 80}, {100, 95, 90, 85, 90} };
String[][] words = { {"chair", "의자"}, // words[0][0], words[0][1] {"computer", "컴퓨터"}, // words[1][0], words[1][1] {"integer", "정수"} // words[2][0], words[2][1] }; Scanner sc = new Scanner(System.in); for(int i = 0; i < words.length; i++){ System.out.printf("Q%d. %s의 뜻은 무엇인가요?", i+1, words[i][0]); String tmp = sc.nextLine(); if(tmp.equals(words[i][1])){ System.out.printf("정답입니다.%n%n"); }else{ System.out.printf("틀렸습니다. 정답은 %s입니다. %n%n", words[i][1]); } }