이전 메소드의 Call에 대해서 공부하고 문제도 풀어 봤습니다. 이제부터는 당연히 메소드에 대한 내용을 좀 더 심도 있게 들어가야 하겠죠? 아직 메소드에 대한 내용들이 남아 있기 때문에 한층 더 깊은 내용을 공부를 할 수 있도록 하겠습니다.
여러분들은 메소드 함수를 보고 4가지 형식으로 볼 때 도대체 retrun을 안하고 결과를 주지 않는 경우가 있는데 이런 경우는 도대체 어느 상황에 사용이 되시는지 궁금할 수 있습니다. 당연히 return을 하지 않는 경우도 많이 존재 하기 때문에 어떤 상황에서 return을 해야 하고 또는 어떤 상황에서는 return이 필요 없는지 이 글을 계속 읽으시면 확인을 해보실 수 있습니다.
이번에 공부를 할 내용은 메소드의 연산 결과를 호출 한 곳에서 알고 싶다면 꼭 return을 해야 하는 Call by Value에 대해서 배워 보겠습니다. Call by Value의 경우에는 retrun을 하지 않는 다면 절대 메소드 안에서 일어난 값의 변경을 알 수가 없습니다. 이 글을 끝까지 읽으신다면 Call by Value에 대해서 이해하시고 사용을 하실 수 있습니다.
Call by Value 란?
Call by Value란 메소드를 호출시 매개변수를 기본 자료형을 받게 하면 Value 즉 값이 이동을 하게 되기 때문에 값을 매개변수에 대입을 하고 메소드가 동작을 하게 됩니다. 그러면 실질 변수나 객체의 이동이 아니기 때문에 그 매개변수를 아무리 바꾸더라도 호출 시 넘겨줬던 변수의 값이 변경이 안 됩니다.
※ Call by Value는 return을 하지 않으면 호출 한 곳의 값을 변경을 할 수 없습니다.
Call by Value 예제
public class CallByValueTest {
static void abc(int a) {
a = 10; // main메소드에 있는 a는 변경되지 않음
}
static int def(int a) {
a = 10;
return a; // Call by value이기 때문에 return을 해서 값을 전달 필요
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a = 5;
abc(a);
System.out.println(a);
a = def(a);
System.out.println(a);
}
}
위의 소스를 분석을 하면 abc메소드 같은 경우 return을 하지 않고 매개변수의 값만 변경을 했고 def메소드 같은 경우에는 값을 변경 후에 return을 하였고 그걸 호출 한 곳에서 a라는 변수에 대입을 했기 때문에 처음에 abc 불렀을 때에는 값이 변경 되지 않고 그대로 5가 출력이 되고 def를 불러서 값을 대입을 했기 때문에 10으로 변경된 것을 확인을 할 수 있습니다.