..

Search

25) 배열의 활용

25) 배열의 활용

배열의 활용


배열의 복사

자바에서 배열은 한 번 생성하면 그 길이를 변경할 수 없습니다.

따라서 더 많은 데이터를 저장하기 위해서는 더욱 큰 배열을 만들고, 이전 배열의 데이터를 새로 만든 배열로 복사해야 합니다.

 

이러한 배열의 복사를 위해 자바에서는 다음과 같이 여러 가지 방법을 제공합니다.

 

1. System 클래스의 arraycopy() 메소드

2. Arrays 클래스의 copyOf() 메소드

3. Object 클래스의 clone() 메소드

4. for 문과 인덱스를 이용한 복사

 

이 중에서 가장 좋은 성능을 보이는 것은 배열의 복사만을 위해 만들어진 arraycopy() 메소드입니다.

하지만 현재 배열의 복사를 위해 가장 많이 사용되는 메소드는 좀 더 유연한 방식의 copyOf() 메소드입니다.

 

arraycopy(), copyOf() 메소드와 for 문을 이용한 복사는 배열의 길이를 마음대로 늘일 수 있습니다.

하지만 clone() 메소드는 이전 배열과 같은 길이의 배열밖에 만들 수 없습니다.

 

다음 예제는 다양한 방법으로 배열을 복사하는 예제입니다.

예제

int[] arr1 = new int[]{1, 2, 3, 4, 5};

int newLen = 10;

 

// 1. System 클래스의 arraycopy() 메소드

int[] arr2 = new int[newLen];

System.arraycopy(arr1, 0, arr2, 0, arr1.length);

 

// 2. Arrays 클래스의 copyOf() 메소드

int[] arr3 = Arrays.copyOf(arr1, 10);

 

// 3. Object 클래스의 clone() 메소드

int[] arr4 = (int[])arr1.clone();

 

// 4. for 문과 인덱스를 이용한 복사

int[] arr5 = new int[newLen];

코딩연습 ▶

실행 결과

1 2 3 4 5 0 0 0 0 0 

1 2 3 4 5 0 0 0 0 0 

1 2 3 4 5 

1 2 3 4 5 0 0 0 0 0 


Enhanced for 문

JDK 1.5부터는 배열과 컬렉션의 모든 요소를 참조하기 위한 Enhanced for 문이라는 반복문이 새롭게 추가됩니다.

이 반복문은 배열과 컬렉션 프레임워크에서 유용하게 사용됩니다.

 

자바에서 Enhanced for 문은 다음과 같은 문법으로 사용합니다.

문법

 for (타입 변수이름 : 배열이나컬렉션이름) {

    배열의 길이만큼 반복적으로 실행하고자 하는 명령문;

}

 

Enhanced for 문은 명시한 배열이나 컬렉션의 길이만큼 반복되어 실행됩니다.

루프마다 각 요소는 명시한 변수의 이름으로 저장되며, 명령문에서는 이 변수를 사용하여 각 요소를 참조할 수 있습니다.

 

다음 예제는 Enhanced for 문을 사용하여 각 배열 요소의 값을 출력하는 예제입니다.

예제

int[] arr = new int[]{1, 2, 3, 4, 5};

 

for (int e : arr) {

    System.out.print(e + " ");

}

코딩연습 ▶

실행 결과

1 2 3 4 5 

 

하지만 Enhanced for 문은 요소를 참조할 때만 사용하는 것이 좋으며, 요소의 값을 변경하는 작업에는 적합하지 않습니다.

 

다음 예제는 for 문과 Enhanced for 문을 이용하여 모든 배열 요소에 10을 더하는 예제입니다.

예제

int[] arr1 = new int[]{1, 2, 3, 4, 5};

int[] arr2 = new int[]{1, 2, 3, 4, 5};

 

for (int i = 0; i < arr1.length; i++) {

  arr1[i] += 10; // 각 배열 요소에 10을 더함.

}

 

for (int e : arr2) {

  e += 10;       // 각 배열 요소에 10을 더함.

}

코딩연습 ▶

실행 결과

11 12 13 14 15

1 2 3 4 5

 

위 예제의 ①번 라인에서는 for 문을 이용하여 각 배열 요소에 10을 더하고 있습니다.

이렇게 for 문을 사용하면, 각 배열 요소의 값을 손쉽게 변경할 수 있습니다.

 

②번 라인에서는 Enhanced for 문을 이용하여 각 배열 요소에 10을 더하고 있습니다.

하지만 실행 결과를 살펴보면, 원본 배열에는 아무런 변화가 없음을 알 수 있습니다.

 

이렇게 Enhance for 문 내부에서 사용되는 배열 요소는 배열 요소 그 자체가 아닌 배열 요소의 복사본입니다.

따라서 Enhance for 문에서 배열 요소의 값을 변경하여도 원본 배열에는 아무런 영향을 주지 못하게 됩니다.


연습문제