Programming Language/Java

[Java] 배열의 복사

깐요 2017. 4. 6. 13:53

배열의 복사

배열을 복사하는 방법은 2가지가 있다

이 둘의 차이점을 이해해야 이후 프로그램을 만들 때 오류를 방지할 수 있다


배열 참조 변수를 복사

 
public class Test{
    
    public static void main(String args[])
    {
        int[] list = {1020304050};
        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 = {1020304050};
        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