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() => 홍길동 ;
잘은 모르겠지만 인스턴스를 초기화 한 시점에 메모리에 할당되어야 참조로 전달 되는 그런 로직인거 같네요.
아무튼..해결!
'JAVA > TIP' 카테고리의 다른 글
Exchange 2015 기준 owa 로그인을 javascript로 구현했을때 세션 타임타웃 해결 (0) | 2021.04.30 |
---|---|
Unity 3D WebGL 배포시 Apache 설정(2.4기준) (0) | 2021.04.21 |