참조_메소드

2024. 1. 11. 22:17JAVA

또또또또또! 질리도록 머리에 박아 넣자.

자바는 항상 변수의 값을 복사해서 대입한다. - Call By Value

 

동작 방식

기본형 : 변수에 있는 '값'을 복사하여 대입한다.

참조형 : 변수에 있는 '주소값'을 복사하여 대입한다.

 

기본형 

public static void main(String[] args) {
    int a = 10;
    System.out.println("호출 전 a = " + a);	// 10
    changePrimitive(a);
    System.out.println("호출 후 a = " + a);	// 10
}

private static void changePrimitive(int a) {
    a = 5;
}

함수를 호출하면서 넣은 인자 a와 메서드의 매개변수 a 는 다르다.

어떻게 다르냐?

앞서 반복했던 내용

'자바는 변수의 값을 읽어 복사하여 대입한다.'

인자의 값을 복사해서 매개변수에 붙여 넣었다. 

인자 a 와 매개변수 a 는 값을 주고 받은 시점에 서로 무관하다.

 

 깜빡했던 내용도 다시 한 번 복습해보자.

메서드가 호출되면, 메서드 실행에 필요한 매개변수 등에 대한 메모리가 새롭게 할당된다.

즉!! 인자(Argument)인 a 와 매개변수(Parameter)인 a는 다르다.

 

참조형

참조형은 아 이제 아는 것 같다. 그만 읇자..

참조형의 경우, 참조 주소값이 복사되어 전달되므로

parameter의 주소값 = argument 의 주소값 

같은 객체를 참조하므로 조작이 발생하면 양쪽 다 값이 바뀌는 것 처럼 보인다.

참조하는 객체는 동일하니까!

public static void main(String[] args) {
    Data data = new Data();
    data.value = 10;
    System.out.println("data = " + data);
    System.out.println("data.value = " + data.value);
    changeRef(data);
    System.out.println("data = " + data.value);
}

private static void changeRef(Data data) {
    System.out.println("data = " + data);
    data.value = 20;
}

 

'JAVA' 카테고리의 다른 글

참조_NULL  (0) 2024.01.13
참조_변수 초기화  (0) 2024.01.13
참조_기본형과 참조형  (0) 2024.01.11
Class_instance  (0) 2024.01.10
Class_이게 뭔데  (0) 2024.01.10