Java

배열(array)

Beekei 2021. 9. 13. 09:04
반응형

배열(array)이란?

같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

서로 다른 타입의 변수들로 구성된 배열은 만들수 없다.

// 5개의 int값을 저장항 수 있는 배열을 생성
int num1, num2, num3, num4, num5; // 변수로 생성
int[] numArray = new int[5]; // 배열로 생성

배열 선언과 생성

변수 또는 타입에 대괄호[]를 붙이면 된다.

// 배열 선언(배열을 다루기 위한 참조변수 선언)
int[] numArray; // 타입[] 변수명; -> 권장
int numArray[]; // 타입 변수명[];

// 배열 생성(실제 저장공간을 생성)
numArray = new int[3] 
	
// 동시에 배열 선언과 생성
int[] numArray = new int[3];

배열의 길이와 인덱스(index)

생성된 배열의 각 저장공간을 배열의 요소(element)라고 하며, 인덱스(index)는 배열의 요소마다 차례대로 붙여진 일련번호이다.

배열의 길이

값을 저장할 수 있는 배열의 요소 개수

한번 선언한 배열의 길이는 변경이 불가능하다.

배열의 길이는 양의 정수(0 포함)여야 하며 최대값은 int타입의 최대값이다.

배열.length를 통해 배열의 길이를 얻을 수 있다.

int[] arr = new int[5];
int arrLength = arr.length; // arrLength -> 5

인덱스(index)

인덱스(index)는 1이 아닌 0부터 시작한다.

배열의 초기화

배열을 선언하고 생성해주고 값을 지정하려면 각 요소마다 값을 지정해 줘야한다.

이런경우 for문(일정한 조건이 있는 경우)이나 간단한 초기화 방법을 이용한다.

// 요소마다 값 지정
int[] numArray = new int[5];
numArray[0] = 50;
numArray[1] = 60;
numArray[2] = 70;
numArray[3] = 80;
numArray[4] = 90;

// for문을 이용한 값 지정(일정한 조건이 있는 경우)
for (int i=0; i < numArray.length; i++) {
	numArray[i] = i * 10 + 50;
}

// 간단한 초기화 (괄호 안에 있는 요소의 수 만큼 자동적으로 배열의 길이 지정)
int[] numArray = new int[]{50, 60, 70, 80, 90};
int[] numArray = {50, 60, 70, 80, 90}; // new int[] 생략 가능

int[] numArray;
numArray = {50, 60, 70, 80,90}; // 에러발생! 배열의 선언과 생성을 따로하는 경우 생략할 수 없음

배열의 출력

배열을 출력할땐 for문이나 Arrays.toString(배열이름) 메서드를 이용

Arrays.toString(배열이름) 메서드는 "[첫번째 요소, 두번째 요소, ...]"와 같은 형식으로 출력

배열 자체를 출력했을땐 배열의 주소가 출력('타입@주소' 형식)

char 배열은 배열 자체로 출력해도 출력 가능(println 메서드는 배열 중 char 배열만 동작)

int[] numArray = {100, 95, 80, 70, 60};
	
// for문을 이용한 출력
for (int i = 0; i < numArray.length; i++) {
	System.out.println(numArray[i]);
}
	
// Arrays.toString(배열이름) 메서드를 이용한 출력
System.out.println(Arrays.toString(numArray));

// 배열의 주소 출력
System.out.println(numArray); // I@12341241와 같은 형식의 문자열 출력
	
// char 배열 출력 (println 메서드는 배열 중 char 배열만 동작함)
char[] charArray = {'a', 'b', 'c', 'd', 'e'};
System.out.println(charArray); // abcde

배열의 복사

배열은 한번 생성하면 길이를 변경할 수 없기 때문에, 더 많은 저장공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로 부터 복사해야 한다.

이때 너무 긴 배열을 생성할 경우 메모리를 낭비하게 되므로 약 2배정도의 길이로 생성하는 것이 적당하다.

for문 대신 System 클래스의 arraycopy()를 사용하면 보다 간단하고 빠르게 배열을 복사할 수 있다.

쓸모없게 된 배열은 JVM(Java Virtual Machine)의 가비지 컬렉터에 의해서 자동적으로 메모리에서 제거된다.

int[] arr = new int[5];

// 2배 길이의 배열 생성
int[] tmp = new int[arr.length * 2]; // new int[10]

// 저장된 요소 복사
// for (int i = 0; i < arr.length; i++) tmp[i] = arr[i];
System.arraycopy(arr, 0, tmp, 0, arr.length); // arr[0]에서 tmp[0]으로 arr.length개의 데이터 복사

// 기존 참조변수에 복사한 배열을 저장
arr = tmp;
반응형