본문 바로가기

웹 프로그래밍/Spring Framework

[JAVA] 메서드와 변수 응용

예제

package test;
import java.util.Scanner;

class Args {
 int x;
 void add(int x){
  x = x + 50;
 }
 
 void add(Args arg){
  arg.x = arg.x + 40;
 }
 void addNew(Args arg){
  arg = new Args();
 }
 void add(int[] arr){
  arr[0]++;
 }
}
public class test {
 static int staticVar2 = 20;
 
 public static void main(String[] args) throws Exception {
  Args arg = new Args();
  arg.x = 100;
  int[] arr = new int[1];
  
  arg.add(arg.x);
  System.out.println("arg.x = " + arg.x);
  arg.add(arg);
  System.out.println("arg.x = " + arg.x);
  arg.addNew(arg);
  System.out.println("arg.x = " + arg.x);
  arg.add(arr);
  System.out.println("arr[0] = " + arr[0]);
  
 }
}

결과

arg.x = 100 //Q1. add(arg.x)로 호출했는데도 100인 이유는 아래에 설명
arg.x = 140
arg.x = 140
arr[0] = 1 

해석

Q1. 처음에 arg.add를 했는데도 arg.x가 100인 이유는 일단 "포인터"의 개념을 알아야하니 나중에 따로 다루도록 하겠습니다. 간단히 설명하자면 Call By Value이기 때문에 50인 Value가 int x에 전달되어 x를 50 증가시키고 함수를 종료합니다. 이전 변수 설명에서도 마찮가지로 함수가 종료되면 그 하위 local Variable은 없어집니다. 따라서 지역변수가 +50된 것이지 결코 arg.x에 존재하는 값이 +50된 것은 아닙니다.