스크린샷 2025-08-11 오후 4.39.49.png

package com.haenin.section03.copy;

import java.util.Arrays;

public class Application1 {
    public static void main(String[] args) {
        /* 목표, 배열의 복사 개념 중 우선 얕은 복사에 대해 이해할 수 있다. */

        int[] originArr = {1, 2, 3};
        int[] copyArr = originArr; /* 필기. 주소를 가져감 */

        System.out.println("originArr = " + Arrays.toString(originArr));
        System.out.println("copyArr = " + Arrays.toString(copyArr));

        copyArr[1]=100;
        System.out.println("originArr = " + Arrays.toString(originArr));
        
        /* 설명. 메소드에서 배열을 반환하지 않아도 된다는 것을 이해 */
        testMethod(originArr);
        System.out.println("메소드 안에서의 변화가 반환하지 않아도 호출한 곳에 영향을 주는지 : " + originArr[0]);
    }
    /* 필기. 메소드 매개변수에서 복사가 얕은 복사가 일어난 것 */
    private static void testMethod(int[] arr) {
        System.out.println("메소드 안에서의 arr로 접근시 모습: "+ Arrays.toString(arr));
        arr[0] = 111;
    }
}

package com.haenin.section03.copy;

import java.util.Arrays;

public class Application2 {
    public static void main(String[] args) {
        /* 목표, 깊은 복사에 대해 이해할 수 있다.
        *  설명.
        *   1. for문을 이용한 수동적인 복사
        *   2. Object의 clone()을 이용한 복사(사용 빈도 높음)
        *   3. System의 arraycopy()를 이용한 복사
        *   4. Arrays의 copyOf()를 이용한 복사
        * */
        int[] originArr = new int[]{1, 2, 3, 4};
        print(originArr, "원본");

        /* 설명. 1. */
        int[] copyArr1 = new int[originArr.length];
        for (int i = 0; i <copyArr1.length ; i++) {
            copyArr1[i] = originArr[i];
        }
        print(copyArr1, "for문을 이용한 사본");

        /* 설명. 2. */
        int[] copyArr2 = originArr.clone();
        print(copyArr2,"clone()을 활용한 사본");

        /* 설명. 3. */
        int[] copyArr3 = new int[originArr.length + 3];
        System.arraycopy(originArr, 0, copyArr3, 3, originArr.length);
        print(copyArr3, "arraycopy()를 활용한 사본 ");

        /* 설명. 4. */
        int[] copyArr4 = Arrays.copyOf(originArr, 3);
        print(copyArr4,"copyOf()f를 활용한 사본");
    }

    /* 설명. 1차원 배열과 문자열 설명으로 출력하는 메소드 */
    private static void print(int[] arr, String desc) {
        System.out.println("========== " + desc + " =========");
        System.out.println("넘어온 배열의 hashcode(10진수로 된 주소): "+ arr.hashCode());
        System.out.println(Arrays.toString(arr));
    }
}