데이터 타입 할당 방식 데이터 타입 예시 alias(할당된 변수)의 값을 변경하면...
기본형 (Primitive Type) 값 (Value) 할당 int, char, boolean, ... original 값은 바뀌지 않는다
(다른 변수에 영향이 없다)
참조형 (Reference Type) 객체의 메모리 주소 할당(=참조) 배열(Array), ... original 값이 바뀐다.
(참조하는 모든 변수에 영향을 미친다)

 

이것을 함수의 내부 처리 방식으로 확인해보자.

 

● 코드 예시 1: value 할당 방식

함수 내부에서 아무리 장난질을 쳐도 원본 데이터가 변경되지 않는다.

public class Practice {
    public static void main(String[] args) {
        int n = 123;
        System.out.println("초기 n = " + n);

        function1(n);
        System.out.println("main 복귀 n = " + n);
    }

    static void function1 (int n) {
        n = n*n;
        System.out.println("함수 내부 n = " + n );
    }
}

실행결과

 

  코드 예시 2: 메모리 주소 할당 방식

함수 내부에서 값이 변경되면 원본 데이터가 변경된다.

import java.util.Arrays;

public class Practice2 {
    public static void main(String[] args) {
        // 원본 어레이
        int[] arr = { 1, 2, 3 };

        // 원본 데이터 확인:
        System.out.println("main 함수의 원본 데이터 배열");
        System.out.println(Arrays.toString(arr));

        // 함수 호출
        // function에 arr 자체를 넘겨줌 (address 할당)
        function(arr);

        // 원본 데이터 확인:
        System.out.println("main 함수로 복귀하였음.");
        System.out.println(Arrays.toString(arr));
    }

    static void function(int[] arr) {
        arr[0] = 999;
        arr[1] = 999;
        System.out.println("함수 내부입니다.");
        System.out.println(Arrays.toString(arr));
    }
}

실행결과

+ Recent posts