본문으로 바로가기

JAVA의 Call By Value 와 Call By Reference ?

category JAVA/TIP 2018. 11. 21. 13:37

C# 이 주력인 저는 JAVA를 베낀? C# 라고 들어서 당연히 JAVA도 파라메타 전달값이 참조형인줄 알았습니다.(물론 상수형 제외)

오늘 개발하다가 함수에 전달한 인자가 자꾸 NULL로 떨어져서 왜일까 구글링 해봤더니 JAVA의경우는 넘길때 인자값의 상태에 다라 Call By Value와 Call By Reference가

달라 진다고 하더군요..헐

예를 들자면 Person 이라는 객체로 만든 person 이라는 초기화된 인스턴스 객체가 있고 이 인스턴스를 인자값으로 전달하는 함수는 내부에서 Call By Reference 로 동작하는 반면,

아직 인스턴스화 되지 않는 person2 라는 null 인 값을 던질경우 함수 안에서는  Call By Value로 넘어와 초기화 시키면 별도의 메모리에 할당되어 관리 되어 지게 되는건..가?

결국 person2는 함수 밖에서도 계속 null인 채로...

public Class UserVO {

   String _name = "이름생략";

   public setName(String pName){

this._name = pName;

   }

     public getName(){

return this._name;

   }

}

UserVO user

Login(user);


public void Login(UserVO pUser){

   if(pUser == null) pUser = new UserVO();

pUser.setName("홍길동");

}


결과값 

user = null;


UserVO user = new UserVO();

Login(user);


public void Login(UserVO pUser){

if(pUser == null) pUser = new UserVO();

pUser.setName("홍길동");

}


결과값 

user not null  

user.getName() => 홍길동 ;



잘은 모르겠지만 인스턴스를 초기화 한 시점에 메모리에 할당되어야 참조로 전달 되는 그런 로직인거 같네요.

아무튼..해결!