배열(Array)
- 배열이란: 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것.
배열의 생성
// 타입 [] 변수이름 = new 타입[길이]; int[] score = new int[5]; // 5개의 int값을 저장할 수 있는 배열 생성
자바스크립트와 다르게 길이를 먼저 정해서 생성한다. 배열은 한번 생성하면 길이를 변경할 수 없다. int 배열을 만들면 각 요소는 int의 default값인 0으로 초기화된다. (eg. score[4] == 0)
score이라는 (참조)변수는 각 배열의 값을 저장하고 읽어올 수 있는 주소값을 가진다.
배열 초기화
int[] score = new int[]{ 50, 60, 70, 80, 90 } // 이때 배열의 길이는 필요x int[] score = { 50, 60, 70, 80, 90 } // new int[] 생략 가능
for문으로 넣어도 되지만 넣고자 하는 값에 일정한 규칙이 없어 for문을 사용할 수 없는 경우 위처럼 간단히 초기화 가능하다.
배열의 출력
import java.util.*; int[] arr = { 1, 2, 3, 4, 5 }; // 스퀘어브라켓 아닌 컬리브라켓 System.out.println(Arrays.toString(arr));
for문으로 출력할 수도 있지만, 위처럼 더 간단하게
Arrays.toString
메소드를 사용해서 출력할 수 있다.만약 arr 자체를 출력한다면
타입@내부주소
값이 출력된다. (eg. I@15db9742) 그러나 char 배열의 경우에는 예외적으로 그 자체를 출력해도 배열의 요소가 출력된다.char[] ch = {'A','B','C'}'; System.out.println(ch); // print ABC
enhanced for(for each)
for(변수선언 : 배열) {} // 배열의 타입과 같은 변수타입 선언 int[] nums = {1,2,3,4,5} int sum = 0; for(int data : nums) { System.out.print(data); // print 12345 sum += data; } System.out.print(sum); // print 15
자바스크립트의
forEach
나for of
구문과 같다.
배열의 복사
배열의 길이를 더 길게 하고 싶다면? 배열의 길이는 변경 불가하므로 더 큰 배열을 생성하려면 기존의 배열을 복사하여 큰 배열에 넣어줘야 한다.
- for문으로 복사하기
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; // 참조변수 arr이 새로운 배열을 가리키게 한다.
결국 참조변수 arr과 tmp는 같은 배열을 가리키게 된다. 즉 배열 arr과 tmp는 이름만 다르고 같은 배열이다. 그리고 전에 arr이 가리키던 배열은 더 이상 사용할 수 없게 된다. 왜냐하면 자신을 가리키는 참조변수가 없는 배열은 사용할 수 없기 때문이다. 더 이상 쓸모없게 된 배열은 JVM의 가비지컬렉터에 의해 자동적으로 메모리에서 삭제된다.
System.arraycopy()
로 복사하기
System.arraycopy(arr, 0, tmp, 0, arr.length); // arr[0]에서 tmp[0]으로 arr.length개의 데이터 복사
위 코드에서 숫자부분은 복사를 시작할 인덱스를 나타낸다.