인프런 커뮤니티 질문&답변

크크룩삥봉님의 프로필 이미지
크크룩삥봉

작성한 질문수

김영한의 실전 자바 - 중급 2편

직접 구현하는 연결 리스트3 - 추가와 삭제2

remove 메소드 관련 질문입니다.

작성

·

94

·

수정됨

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
데이터를 삭제하는 기능에서 removeNodenull값으로 처리하는 이유가 있을까요?

removeNode를 더 이상 사용되지 않는 것 같은데, 해당 노드의 itemnextnull값으로 처리해야만 GC 대상이 되는건가요?

null값으로 명시하지 않아도 될 것 같아 질문드립니다.

    // 추가 코드
    public Object remove(int index) {
        Node removeNode = getNode(index);
        Object removedItem = removeNode.item;
        if (index == 0) {
            first = removeNode.next;
        } else {
            Node prev = getNode(index - 1);
            prev.next = removeNode.next;
        }

        removeNode.item = null;
        removeNode.next = null;
        size--;
        return removedItem;
    }

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 크크룩삥봉 님의 질문과 관련하여, LinkedList 내 removeNodenull 값으로 처리하는 이유에 대한 비슷한 질문과 그 답변을 찾았습니다.

이러한 처리는 객체의 참조를 끊어 메모리 관리에 유리하게 작용하기 위함입니다. 특히 자바에서는 가비지 컬렉션이 자동으로 사용하지 않는 객체의 메모리를 관리하지만, 명시적으로 null을 할당함으로써 더 이른 시점에 가비지 컬렉터가 해당 객체를 회수할 수 있도록 하고, 불필요한 메모리 사용을 줄이는데 도움을 줍니다.

LinkedList 구현 시 질문” 게시글에서 remove 메소드 구현 중 removeNode.item = removeNode.next = null; 로 두 개의 필드를 null로 설정하여 제네릭을 사용할 때 발생하는 문제에 대한 질문이 있었습니다. 이 질문에서는 제네릭을 도입한 후의 코드 변경으로 인한 에러에 대해 논의되었고, 제네릭 도입 전후의 처리 방식이 다르기 때문에 발생하는 문제에 대한 설명을 포함하고 있습니다. 이러한 내용은 당신이 질문하신 내용과는 직접적인 해결책은 아니지만, removeNode 처리 방식에 대한 이해를 돕는 데 유용할 수 있습니다.

해당 내용은 질문의 핵심인 removeNodenull로 설정하는 이유와는 직접적인 답변이 아닐 수 있으나, 객체 처리에서 왜 이러한 방식을 선택하는지에 대한 이해의 기반이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

크크룩삥봉님의 프로필 이미지
크크룩삥봉

작성한 질문수

질문하기