-
JAVA - 배열 (array)프로그래밍/JAVA 2021. 12. 22. 22:01
배열이란?
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것, 서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
배열의 선언과 생성
타입[] 변수이름; // 배열을 선언(배열을 다루기 위한 참조변수 선언) 변수이름 = new 타입[길이]; // 배열을 생성(실제 저장공간을 생성)
배열을 선언하는 것은 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이다. 배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어진다.
int[] score = new int[5];
배열의 인덱스
생성된 배열의 각 저장공간을 '배열의 요소(element)'라고 한다. 각 요소에 접근하는 방법은 '배열이름[인덱스]'의 형식으로 접근할 수 있다. 배열의 인덱스는 배열의 요소마다 붙여진 일련번호로 각 요소를 구별하는데 사용된다.
// 인덱스(index)의 범위는 0부터 '배열길이 -1까지." int[] score = new int[5]; // 길이가 5인 int 배열 생성 score[0] = 0; // 배열이름[인덱스] 형식으로 배열의 요소에 접근 score[1] = 10; score[2] = 20; score[3] = 30; score[4] = 40;
ArrayIndexOutOfBoundsException
index의 범위를 벗어난 값을 index로 사용하지 않도록 주의해야 한다. 유효한 범위를 벗어난 값을 index로 사용할 경우 컴파일러는 이러한 실수를 걸러주지 못하기 때문에 ArrayIndexOutOfBoundsException 에러가 발생한다.
int[] score = new int[5]; // 길이가 5인 int배열, index 범위 : 0~4 score[5] = 100; // index의 범위를 벗어는 값을 index로 사용. 에러 발생
배열의 길이
배열의 길이는 int범위의 양의 정수(0도 포함)이어야 한다. 배열의 길이는 배열의 요소의 개수, 즉 값을 저장할 수 있는 공간의 개수이다. 배열의 길이는 양의 정수이어야 하며 최대값은 int타입의 최대값, 약 20억이다. 배열 길이가 0일 수도 있다.
배열이름.length
자바에서는 JVM이 모든 배열의 길이를 별도로 관리하며, '배열이름.length'를 통해서 정보를 얻을 수 있다.
배열의 출력
for문을 통해 배열에 저장된 값을 확인할 수 있으며, 'Arrays.toString(배열이름)'메서드를 사용해서 출력할 수도 있다. 생성된 배열을 참조한 변수의 이름을 바로 출력한다면 변수에 저장된 '배열의 주소'값이 출력된다.
배열의 복사
배열에 저장할 공간이 부족한 경우에는 어떻게 해야 할까?
배열은 한번 생성하면 그 길이를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 보다 큰 배열을 새로 만들어야 한다.
배열의 길이를 변경하는 방법:
1. 더 큰 배열을 새로 생성한다.
2. 기존 배열의 내용을 새로운 배열에 복사한다.
- for문 사용
int[] arr = new int[5]; ... // 새로운 배열 생성 ( 기존 arr의 길이 2배) int[] tmp = new int[arr.length * 2]; // 배열 arr에 저장된 값들을 배열 tmp에 복사한다. for (int i = 0; i < arr.length; i++) { tmp[i] = arr[i]; } // 변수 tem에 있는 저장된 값을 arr에 저장한다. arr = tmp;
- System.arraycopy()를 이용한 배열의 복사
char[] abc = {'A', 'B', 'C', 'D'}; char[] num = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; // char 배열은 for문을 쓰지 않아도 값이 붙여서 출력된다. System.out.println(abc); System.out.println(num); // 배열 abc와 num을 붙여서 하나의 배열 (result)로 만든다. char[] result = new char[abc.length + num.length]; System.arraycopy(abc, 0, result, 0, abc.length); System.arraycopy(num, 0, result, abc.length, num.length); System.out.println(result);
실행결과
ABCD 0123456789 ABCD0123456789
for문은 배열의 요소 하나하나에 접근해서 복사하지만, arraycopy()는 지정된 범위의 값들을 한 번에 통째로 복사한다. 각 요소들이 연속적으로 저장되어 있어서 가능. 배열의 복사는 for문보다 System.arraycopy()를 사용하는 것이 효율적이다.
'프로그래밍 > JAVA' 카테고리의 다른 글
JAVA - String 배열 (0) 2021.12.23 알기 쉬운 JAVA HashTable, HashMap에 대해 알아보자 (0) 2020.05.21 알기 쉬운 JAVA HashSet에 대해 알아보자 (1) 2020.05.15 알기 쉬운 JAVA Enumeration과 Iterator 인터페이스에 대해 알아보자 (0) 2020.05.14 알기 쉬운 JAVA ArrayList에 대해 알아보자 (0) 2020.05.14