배열과 메모리 Call by Reference

stan·2023년 5월 9일
0

Java 개념

목록 보기
12/33

Java에서 함수(main포함)들의 메모리는 자동 해제 된다

배열은 heap 메모리 영역을 쓰기 때문에 Call by Reference(참조에의한 호출을 함)

package class01;

public class Test03 {
	public static void func1(int num) {
		num +=100; //num = num + 100
	}
	public static int func2(int num) {
		return num--;
	}
	public static void func3(int[] data) {
		//함수를 호출할대에 인자로 배열을 사용하는경우,
		// (배열 특성상 주소값이 이동하기때문에)
		// 참조에 의한 호출(call by reference) 
		for(int i=0; i<data.length;i++ ) {
			data[i]=123; // [ 123, 123, 123]
					//index	   0    1    2
		}
	}
	public static void main(String[] args) {
		int num = 10;
		int[] data = new int[3];
		for(int i =0;i<data.length;i++) {
			data[i]=i+1; // [ 1, 2, 3 ]
		}
		func1(num);// 
		System.out.println("num1 = " +num);
		num=func2(num); // 
		System.out.println("num2 = " + num);
		func3(data); // <-- [ 123, 123, 123]
		System.out.print("[ ");
		for(int v:data) {
			System.out.print(v+ " ");
			// [ ?, ?, ?]
		}
		System.out.println("]");
	}
}

Run

  • main공간이 열림
  • num 변수 공간에 10을 대입
  • data 배열 공간은 heap 메모리 영역에 주소값을 생성하고 배열을 생성함
  • func(1) :
    - func1 함수 공간에서 10이라는 인자 값을 받아와 변수에 대입. num+=100; 으로 덮어 씌움. 하지만 출력은 되지 않음. 반환값이 없음. (Call by value)
  • func2 함수 공간에 10이라는 인자 값을 받음. return num--; 반환 먼저 한 후 증감. 10이 반환 됬기때문에 num 출력 해도 10을 출력. (Call by value)
  • func3 함수공간에 data라는 인자를 받을 시 call by reference (참조에 의한 호출)로 주소값을 타고 heap 메모리 영역에 접근 후 그 영역에서 123을 배열의 각 위치에 대입. Main에서 주소값을 기억하기 때문에 반환하지 않아도 바뀌고 바뀐 값이 출력 가능.

출력 결과 :

profile
이진 입니다

0개의 댓글

관련 채용 정보