Post

[Spring] Call by reference란?

[1] Call by reference란 무엇인가?

: 참조에 의한 호출

  • call by reference 방식은 함수 호출 시 변수의 메모리 주소를 전달한다
    따라서 함수 내에서 변수 값이 변경되면, 아규먼트로 전달된 객체의 값도 변경된다

[2] Call by reference 쓰는 방법

  • 아래와 같이 MyNumber라는 클래스 객체를 정의한다
  • getter: 객체의 상태(값)를 읽는데 사용 > 현재 객체의 값을 반환
  • setter: 객체의 상태(값)를 변경하기 위한 메서드 > 수정되거나 새로운 값으로 갱신된 값을 반환
1
2
3
4
5
6
7
8
9
10
11
12
class MyNumber {
    private int value;
    public MyNumber(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
}
  • Inner 클래스로 어규먼트로 전달된 값을 “20”으로 변경해주는 modifyNumber메서드를 만든다
  • 메모리 주소를 복사해서 전달한다
    1
    2
    3
    
    public static void modifyNumber(MyNumber num) {
        num.setValue(20);
    }
    
  • 처음에 정의해둔 MyNumber 객체를 생성하고 초기값을 “10”으로 설정한다
  • modifyNumber 함수가 호출되기 전과 후를 출력한다
  • myNumber의 메모리 주소값이 변경되어 “10” -> “20” 으로 갱신된 값을 반환하는 것을 볼 수 있다
    1
    2
    3
    4
    5
    6
    7
    8
    
    public class CallByReference {
    public static void main(String[] args) {
        MyNumber myNumber = new MyNumber(10);
    
        System.out.println("함수 호출 전: " + myNumber.getValue() );
        modifyNumber(myNumber);
        System.out.println("함수 호출 후: " + myNumber.getValue() );
    }
    

    image

Call by value 방식

  • 값에 의한 호출(Call by value) 방식은 함수 호출 후 변수값이 변경돼도 외부 변수 값은 변경되지 않는다
    image
This post is licensed under CC BY 4.0 by the author.