연결리스트 직접 구현V3 삭제 부분 코드 질문
126
작성한 질문수 38
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요?예
안녕하세요 직접 구현하는 연결리스트 3 추가와 삭제 2편을 복습하다 궁금한 점이 생겨 여쭤보게 되었습니다 !
지금 Object remove 메서드에 else 구절을 보면 (첫번째 노드를 삭제하는 경우가 아닌 경우)
getNode(index-1).next = removedNode.next;로 구현이 되어있습니다 !
여기에서 스스로 복습하는 과정에서 저는
getNode(index-1).next = getNode(index+1);로 생각을 했었는데, 혹시 이 로직으로 해도 문제가 되지 않는지가 궁금하네요 ..!
그리고 바로 하단에
removeNode.item = null;
removeNode.next = null;로 직접 null 값으로 비워주는 이유가 있을까요 ?
getNode(index-1).next = getNode(index+1);로 두면 삭제할 노드인 getNode(index)는 연결이 끊기기에 자동으로 GC의 대상이 된다고 생각해서 여쭤봅니다 !
복습하면서 많은 것들을 처음에는 보이지 않던 것들을 많이 얻어가는 중입니다 좋은 강의 제공해주셔서 감사드립니다 !
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
연결 리스트의 삭제와 관련하여 궁금한 점을 여쭤봐 주셨네요. 질문하신 내용을 바탕으로 두 가지 점에 대해 설명드리겠습니다.
getNode(index-1).next = getNode(index+1); 로직의 유효성:
getNode(index-1).next = removedNode.next와getNode(index-1).next = getNode(index+1)는 기능적으로 유사하게 작동합니다. 둘 다 현재 위치의 노드를 제거하고, 그 노드의 이전 노드를 다음 노드에 연결하는 작업을 수행하는 것입니다.
- 다만, 이 두 줄 모두
index,index-1,index+1에 대해 올바르게 정의된 상태이며, 리스트의 경계를 벗어나지 않았을 경우에만 제대로 작동한다는 점을 주의해야 합니다.
getNode(index+1)를 사용하는 것은 삭제할 노드의 바로 다음 노드에 대한 명확한 참조를 나타내긴 하지만, 코드의 기본적인 동작에 있어서는 큰 차이는 없을 것입니다.
removeNode.item = null;와removeNode.next = null;로 초기화하는 이유:- 이 처리는 가비지 컬렉션(GC)을 돕는 의미가 있습니다. Java에서는 객체가 더 이상 참조되지 않을 때 메모리가 자동으로 해제되지만, 명시적으로 사용한 자원을 해제해 줌으로써 메모리 관리에 도움을 줄 수 있습니다.
- 특히, 리스트처럼 많은 노드를 담고 있는 경우에는 다음 노드에 대한 참조를 명시적으로 제거해 줌으로써 한번의 정리 단계에서 더 많은 노드를 메모리에서 해제할 수 있습니다.
- 이 처리는 가비지 컬렉션(GC)을 돕는 의미가 있습니다. Java에서는 객체가 더 이상 참조되지 않을 때 메모리가 자동으로 해제되지만, 명시적으로 사용한 자원을 해제해 줌으로써 메모리 관리에 도움을 줄 수 있습니다.
제네릭 타입으로 전환하며 발생한 에러에 대한 질문도 받으셨는데, 이는 일반적으로 타입 변환과 관련이 있으며, 제네릭을 사용함으로써 더 명확한 타입 안전성을 제공하여 오류를 방지하는 데 기여합니다.
이 질문과 관련하여 더 구체적인 상세 내용을 다룬 질문들을 보실 수 있습니다:
- LinkedList 구현 관련 제네릭 사용 시 에러 : 제네릭을 도입할 때 발생 가능한 에러의 원인이 잘 설명되어 있습니다.
- 참조형 데이터의 메모리 관리 : 객체의 참조와 해당 데이터 구조에서의 메모리 관리에 대한 질문이 다루어졌습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
제네릭 타입 매개변수 제한과 관련한 문의입니다.
0
76
3
강의가 좀 버겁다 느껴질 때 학습방법 문의
1
126
4
제네릭 반환값 및 파라미터 선언 방식의 변화 <T> T
0
56
1
new T()가 안 되는 니유
0
95
1
안녕하세요, 문제와 실행 결과가 다른 부분이 있어 제보드립니다.
0
97
2
자바 로드맵 선택 질문
0
109
2
실전 자바 중급 - 2편 후 추천 강의
0
172
2
실프로젝트에서 Java25버전 사용
0
114
1
Arrays.sort
0
66
1
블로그 작성 시, 저작권 문제에 대하여
0
164
1
중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.
0
92
3
pop()과 poll()의 차이
0
94
1
특정 index의 노드 조회하기 질문
0
65
2
List.of() 비어있는 불변 리스트 생성
0
80
2
문제2: 개 타입 반환
0
51
2
[리뷰] 중급2편까지 겨우 완강 했습니다.
0
109
2
문제와 풀이1 Ex2와 Ex3
0
63
2
노드 삭제시 노드 null값으로 초기화
0
74
2
강의영상에 대한 질문
0
56
1
타입 매개변수 제한
0
59
1
compareTo
0
66
1
직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다
0
94
3
섹션 8-58 equals and hashcode 에서 코드가 다르게 생성됨
0
67
2
퀴즈 오류 관련 문의
0
106
1





