이 글에서는 Java의 ArrayList(배열 목록)에서 중복된 요소를 제거하는 방법을 알아보겠습니다. 리스트(List)는 요소를 순차적으로 저장하고 접근할 수 있는 순서가 있는 컬렉션입니다. 인덱스 기반 메서드를 통해 요소의 삽입, 수정, 삭제, 검색이 가능하며, 중복 요소도 허용합니다.
그렇다면 중복을 제거하려면 어떻게 해야 할까요? 핵심 아이디어는 간단합니다. Set은 중복 값을 가질 수 없다는 특성을 활용하는 것입니다. 리스트를 Set으로 변환하면 자동으로 중복이 제거되며, LinkedHashSet을 사용하면 원래의 삽입 순서까지 유지할 수 있습니다.
예제 시나리오
먼저 예제를 통해 살펴보겠습니다.
입력값:
정의된 리스트: [Java, Scala, Python, Java]
기대 출력값:
중복 제거 후 리스트: [Java, Scala, Python]
알고리즘
전체 과정은 다음과 같은 단계로 진행됩니다.
Step 1 - 시작 Step 2 - input_list라는 이름의 리스트와 result_set이라는 이름의 Set을 선언한다. Step 3 - 값을 정의한다. Step 4 - Set은 중복 값을 가질 수 없으므로 입력 리스트를 Set으로 변환한다. Step 5 - 결과를 출력한다. Step 6 - 종료
방법 1: main 함수에서 모든 작업 처리
첫 번째 방법은 모든 연산을 main 함수 안에서 직접 처리하는 방식입니다.
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
List<String> input_list = new ArrayList<String>();
input_list.add("Java");
input_list.add("Scala");
input_list.add("Python");
input_list.add("Java");
System.out.println("정의된 리스트: " +input_list.toString());
Set<String> result_set = new LinkedHashSet<String>(input_list);
System.out.println("중복 제거 후 리스트: "+result_set);
}
}출력 결과
필요한 패키지가 임포트되었습니다 정의된 리스트: [Java, Scala, Python, Java] 중복 제거 후 리스트: [Java, Scala, Python]
방법 2: 객체 지향 방식으로 함수 분리
두 번째 방법은 중복 제거 로직을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일에 맞게 구현하는 것입니다. 코드의 재사용성과 가독성이 향상되므로 실무에서 더 권장되는 방식입니다.
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class Demo {
static void remove_duplicates(List<String> input_list){
Set<String> result_set = new LinkedHashSet<String>(input_list);
System.out.println("중복 제거 후 리스트: "+result_set);
}
public static void main(String[] args) {
System.out.println("필요한 패키지가 임포트되었습니다");
List<String> input_list = new ArrayList<String>();
input_list.add("Java");
input_list.add("Scala");
input_list.add("Python");
input_list.add("Java");
System.out.println("정의된 리스트: " +input_list.toString());
remove_duplicates(input_list);
}
}출력 결과
필요한 패키지가 임포트되었습니다 정의된 리스트: [Java, Scala, Python, Java] 중복 제거 후 리스트: [Java, Scala, Python]
핵심 포인트 정리
- LinkedHashSet 사용 이유: 일반 HashSet 대신 LinkedHashSet을 사용하면 중복 제거와 동시에 원본 리스트의 삽입 순서를 그대로 유지할 수 있습니다.
- Set의 특성 활용: Set 컬렉션은 정의상 중복 요소를 허용하지 않으므로, 리스트를 Set으로 변환하는 것만으로 중복이 자동으로 제거됩니다.
- 함수 분리의 장점: 중복 제거 로직을 별도 메서드로 분리하면 코드 재사용성이 높아지고 유지보수가 쉬워집니다.
두 방법 모두 동일한 결과를 출력하지만, 상황에 따라 적절한 방식을 선택하여 사용하시기 바랍니다.