휴먼에러_지역변수, 인스턴스 변수 착각

2024. 6. 28. 22:19etc

상황

- LinkedList 학습

- 편의상 add() 메서드 등을 main() 이 있는 class 에서 static method() 로 작성함

- Node를 연결시키고 마지막 Node에 새로운 노드를 추가하려고 함

public class Node {
    private Object item;
    private Node next;
}

 

 

문제점

- 아래와 같은 코드를 통해새로 노드를 추가했다고 생각했으나 추가가 안 됨.

private static void add(Node node, String param) {
    Node lastNode = getLastNode(node);
    Node next = lastNode.getNext();
    next = new Node(param);
}

 

문제점

착각 내용

getLastNode() 를 통해 마지막 Node 의 참조값을 받아왔고,

lastNode.getNext() 를 통해 Node가 갖는 next 의 참조 변수의 주소값을 Node next에 할당했고,

next 에 new Node()를 통해 새로운 노드를 생성하였으니,

LastNode 인스턴스의 next 에 새로운 노드를 추가했다고 착각했음. 

 

원인

- 상기 코드에서 Node next 는 add() 메서드의 지역변수일 뿐이므로, Node 인스턴스 변수인 next와 무관함.

- lastNode.getNext() = new Node(param); 이 가능하다면 문제 없었겠지만, lastNode.getNext() 는 다음 노드의 주소값을 호출하는 메서드일 뿐이므로, 새로운 Node를 대입할 순 없음.

 

해결

private static void add(Node node, String param) {
    Node lastNode = getLastNode(node);
    lastNode.addNext(new Node(param));
}

Node 자체에서 참조변수를 수정하도록 변경

 

 

--주의할 점--

변수명에 따라 언제든 오류가 발생할 수 있고, 이는 명백히 휴먼 에러다.

언제든 발생할 수 있는 문제이므로, 변수명 작명에 주의하자.

 

그리고, 기본을 잊지 말자. 

지역변수와 인스턴스 변수는 다르다.

'etc' 카테고리의 다른 글

JPA - 등장 배경  (0) 2024.11.06
h2_문법 오류_큰 따옴표, 작은 따옴표  (0) 2024.02.27
순차 탐색 ? 이진 탐색?  (0) 2024.02.17
SOLID - OCP  (0) 2024.02.12