Linked List질문드립니다.

조회수 416회

linked list공부를 하는 도중 다음과 같은 코드를 보았습니다.

public void addFirst(Object input){
    Node newNode = new Node(input);
    newNode.next = head;
    head = newNode;
    size++;
    if(head.next == null){
        tail = head;
    }
}

다음은 linked-list와 node의 코드입니다.

public class LinkedList {
    // 첫번째 노드를 가리키는 필드
    private Node head;
    private Node tail;
    private int size = 0;

    private class Node{

        private Object data;
        private Node next;
        public Node(Object input) {
            this.data = input;
            this.next = null;
        }
        public String toString(){
            return String.valueOf(this.data);
        }
    }
}

해당코드에서 드는 의문은 한줄입니다.

 head = newNode;

이부분이 이해가 잘 가지 않습니다. 우선 저러한 코드가 사용될시 head값에 저장되는 값은 newNode가 가진 value값을 복사해서 가지게 되는 것인지 혹은 newNode가 저장된 memory주소인지가 의심스럽습니다. 우선 간단한 테스트 결과 저는 다음의 방식이 memory의 주솟값을 넣는 방식이란 점을 확인 하였습니다. (혹시몰라 테스트에 사용한 코드 역시 올려봅니다.)

public class HelloWorld{

     public static void main(String []args){
        int a = 3;
        int b = a;
        System.out.println("a : "+a);
        a-=1;
        System.out.println("b : "+b);
        num c = new num(3);
        num d = c;
        System.out.println("c : "+c.value);
        c.value-=1;
        System.out.println("d : "+d.value);
     }
}
public class num{
     int value;
     num(int input){  
         value = input;
     }
}

(이건 결과값입니다.)

a : 3
b : 3
c : 3
d : 2

보시다시피 int형의 변수는 단순히 값만을 복사했지만 c의 주솟값이 들어가 같은 값을 가지고 있는 d의 경우는 c의 값을 변화시켰음에도 그 영향이 d에도 나타납니다. 그렇다면

addFirst(10);
addFirst(20);

다름과 같이 코드를 실행했을때 첫번째 노드는 잘 생성되지만 20의 값을 넣어준 코드는 head가 가르키고 있는 node, 즉 메모리 어딘가에 존재하는 10의 값을 가진 node의 값을 20으로 바꿔버리지 않을까하는 생각이 들어 질문하게되었습니다.

요약 1.test결과 java는 call by reference임 2.그럼

 head = newNode;

이런코드는 쓰면 안되는거 아닌가요?

친절한 답변 부탁드리겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • addFirst 를 두번하면 안되겠지요. 정영훈 2019.12.10 00:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)