휴먼에러_지역변수, 인스턴스 변수 착각
2024. 6. 28. 22:19ㆍetc
상황
- 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 |