진짜 개발자
본문 바로가기

Language/Java

Java - ArrayList 제거 안되는 문제(Wrapper Class)

728x90
1. ArrayList remove 문제

이번 포스팅에서는 Spring Boot로 백엔드로직 구현중 삭제 로직을 구현하며 발생했던 ArrayList에 관련한 문제를 다루도록 하겠습니다.

 

1. ArrayList remove 문제

상황은 이렇습니다. ArrayList를 이용하여 데이터를 저장하고, ArrayList의 remove()메소드를 이용하여 데이터를 지우려는 상황이었습니다. 하지만 결과는 데이터가 지워지지 않았습니다.

 

 

2. 이유

이유는 위의 그림을 보면 알 수 있습니다. ArrayList에서 제공하는 remove()메소드는 오버로딩되어 2개가 존재했습니다. 이때 하나는 Object를 매개변수로 전달받고 나머지 하나는 int를 매개변수로 전달받습니다.

 

그래도 모르시겠다면, 이 메소드의 매개변수를 주목해주세요. 매개변수로 기본 타입 intWrapper ClassInteger를 매개변수로 받고 있습니다. 즉 객체를 매개변수로 받고 있는 것이죠, 그래도 이유를 모르시겠다면 아래에서 조금더 자세히 알아보겠습니다.

 

2.1 ArrayList의 remove(Object o) 메소드

위의 코드는 ArrayList의 remove(Object o) 메소드입니다. 이 메소드는 list를 하나하나 살피면서 매개변수로 전달받은 객체와 같은(equals)객체가 존재하는 경우 그것을 삭제하고 true를 반환합니다. 따라서 우리는 매개변수로 index를 전달하려 했지만 객체가 전달되었기 때문에 해당 객체와 완전히 동일한 객체가 리스트에 존재하지 않기 때문에 리스트에 변화가 없던 것입니다.

 

 

3. 해결

해결 방법은 간단합니다. Wrapper클래스가 아닌 primitive 타입을 매개변수로 전달받아 삭제메소드를 이용하면 됩니다.