늘 겸손하게

Java 객체 인자로 전달, 레퍼런스 본문

Programming/Java

Java 객체 인자로 전달, 레퍼런스

besforyou999 2022. 2. 8. 20:02

 

안녕하세요 besforyou입니다


1. 기본 타입의 값이 전달되는 경우 

 

코딩을 하다 보면 메소드(멤버 함수) 호출하는 경우가 많습니다.

 

기본 타입의 값이 메소드의 인자로 전달될 때는 값이 매개 변수에 복사되어 전달이 되기 때문에 실인자 값은 변경되지 않습니다.

 

public class CallByValue {
	public static void main(String args[]) {
    	int n = 10;
        increase(n);
        System.out.println(n);	// output : 10
    }
    
    static void increase(int m) {
    	m = m + 1;	// n 값은 변하지 않는다.
    }
}

 

위 코드를 보면 Increase 메소드가 n값을 1 증가시킬 것 같지만 n값이 매개변수에 복사되어 전달되기 때문에 n값은 변하지 않습니다.

 

 

 

2. 객체가 전달되는 경우

 

객체를 메서드의 인자로 전달하면 객체의 레퍼런스가 매개변수에 복사됩니다. 즉, 메소드가 실인자 객체를 공유할 수 있게 됩니다.

 

public class ReferencePassing {
	public static void main(String [] args) {
    	Circle pizza = new Circle(10);
        increase(pizza);
        System.out.println(pizza.radius);	// output : 11
    }
    
    static void increase(Circle m) {
    	m.radius++;	// main 메소드의 pizza 객체의 radius 값이 증가
    }   
}

 

객체의 레퍼런스가 매개변수에 복사되기 때문에 pizza 객체의 radius값이 증가합니다.