2016년 4월 7일 목요일

Java 변수 Scope 의 이해

Java의 변수 Scope를 올바로 이해하자.

public void addToLeft(TreeNode node, Integer value) {
    TreeNode left = node.left;

    if (left == null) left = new TreeNode(value);
}

위 함수는 마치, 인자로 넘겨진 node의 왼쪽에 새로운 노드를 만들어주는 함수로 보인다.

그러나 위 함수를 실행시키고 나서,

인자로 넘긴 node의 왼쪽 node를 확인해 보면

여전히 null 값을 가지고 있다.

그 이유는...

Java의 객체 변수는 reference변수이기 때문이다. 

    TreeNode left = node.left;

함수 내에서 left 라는 변수를 만들어서, node.left가 가리키고 있는 객체를

가리키게 했다.

그리고 나서

left= new TreeNode(value)

를 했는데, 이때

left가 가리키는게 새롭게 생성된 메모리를 가리키지,

node.left가 가리키는 건 여전히 null이다.

public void addToLeft(TreeNode node, Integer value) {
     node.left = new TreeNode(value);
}

위와 같이 하면 원하는데도 node의 왼쪽에 새로운 노드가 달리게 된다.

혹은 아래와 같이 해도 우리가 넘겨준 객체에 대해 left가 할당이 되게 된다.

public void addToLeft(TreeNode node, Integer value) {
     TreeNode itr = node;
     itr.left = new TreeNode(value);


}



댓글 없음:

댓글 쓰기