더북(TheBook)

remove() 메서드 안에서 재귀 함수인 __remove_recursion() 메서드를 호출합니다. 이때 __remove_recursion() 함수 앞에 언더바( _ )가 두 개 붙은 이유는 이 함수가 클래스 내부에서만 쓰이는 함수이기 때문입니다. 유저 프로그래머가 실수로 호출하지 않도록 정보 은닉을 한 것입니다. __remove_recursion() 메서드는 메서드를 호출한 노드를 루트 노드로 하여 대상 노드를 삭제한 후 트리의 업데이트된 루트 노드와 삭제된 노드를 반환합니다. 삭제 노드가 루트 노드인 경우 루트 노드가 변경될 수 있으므로 반드시 루트 노드를 업데이트해야 합니다. remove() 메서드는 __remove_recursion() 메서드에서 반환받은 삭제 노드 removed_node만 반환하면 됩니다.

remove() 메서드는 대상 데이터를 왜 삭제만 하지 않고 삭제된 노드를 반환하는 걸까요? 그 이유는 삭제된 노드의 데이터를 수정한 뒤 다음 절에서 만들 insert_node() 메서드를 통해 트리에 다시 삽입할 수 있기 때문입니다. 이렇게 하면 insert() 메서드처럼 항상 새로운 노드를 만들지 않아도 되기 때문에 객체 생성으로 발생하는 부담을 덜 수 있습니다. 노드를 자주 삭제해야 하는 상황이라면 유용하게 사용할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.