배열의 복사
배열을 복사하는 방법은 2가지가 있다
이 둘의 차이점을 이해해야 이후 프로그램을 만들 때 오류를 방지할 수 있다
배열 참조 변수를 복사
public class Test{
public static void main(String args[])
{
int[] list = {10, 20, 30, 40, 50};
int[] copy_ref = list; //list를 참조하여
int length = list.length;
for (int i = 0; i < length; i++)
{
System.out.print(list[i] + " ");
}
System.out.println();
for (int i = 0; i < length; i++)
{
System.out.print(copy_ref[i] + " ");
}
System.out.println();
list[1] = 66;
for (int i = 0; i < length; i++)
{
System.out.print(list[i] + " ");
}
System.out.println();
for (int i = 0; i < length; i++)
{
System.out.print(copy_ref[i] + " ");
}
System.out.println();
}
}
copy_ref 배열에 참조 변수 list 를 참조하여 복사했다
둘의 각 요소의 값을 동일하다
list[1] 의 값을 66으로 바꿨다
바꿔주지 않았던 copy_ref[1] 의 값도 66으로 바뀐 것을 확인할 수 있다
참조 변수를 이용한 복사는 변수 그 자체를 참조한 것이다
위 그림처럼 copy_ref 는 list 와 같은 배열을 가리킨다
C의 포인터 개념을 알고있다면 이해하기 쉽다
따라서 list 의 값이 바뀌면 copy_ref 의 값도 바뀌게 된다
copyOf() 메소드 사용
import java.util.Arrays;
public class Test{
public static void main(String args[])
{
int[] list = {10, 20, 30, 40, 50};
int[] copy_ref = Arrays.copyOf(list, list.length); //copyOf 메소드 사용
int length = list.length;
for (int i = 0; i < length; i++)
{
System.out.print(list[i] + " ");
}
System.out.println();
for (int i = 0; i < length; i++)
{
System.out.print(copy_ref[i] + " ");
}
System.out.println();
list[1] = 66;
for (int i = 0; i < length; i++)
{
System.out.print(list[i] + " ");
}
System.out.println();
for (int i = 0; i < length; i++)
{
System.out.print(copy_ref[i] + " ");
}
System.out.println();
}
}
Arrays 클래스의 copyOf 메소드를 사용했다
참조 변수를 사용할 때와는 다르게 원래의 함수이 요소를 변경시켜도
복사한 배열의 요소는 변함이 없다는 것을 확인할 수 있다
즉 copy_ref 는 list 의 요소와 같은 값을 가진 별개의 배열이 되었다
320x100
'Programming Language > Java' 카테고리의 다른 글
[Java] Laser Maze 게임 Prototype (1) | 2017.06.11 |
---|---|
[Java] 객체 지향 프로그래밍 (0) | 2017.04.07 |
[Java] Calendar, 날짜와 시간 (0) | 2017.03.20 |