이 글에서는 Java를 사용하여 리스트(List)에서 하위 목록(SubList)을 제거하는 방법을 알아보겠습니다.
리스트는 요소를 순차적으로 저장하고 접근할 수 있는 정렬된 컬렉션(Ordered Collection)입니다. 인덱스 기반의 메서드를 제공하여 요소를 삽입, 수정, 삭제, 검색할 수 있으며, 중복된 요소도 허용합니다.
그럼 실제 예시를 통해 동작 방식을 살펴보겠습니다.
입력 예시
입력 리스트: [Java, Programming, Is, Fun]
출력 예시
하위 목록 제거 후 리스트: [Java, Programming]
즉, 인덱스 2부터 4 직전까지의 요소("Is", "Fun")가 제거되어 앞의 두 요소만 남게 됩니다.
알고리즘
리스트에서 하위 목록을 제거하는 절차는 다음과 같습니다.
Step 1 - 시작합니다. Step 2 - AbstractList 타입의 input_list를 선언합니다. Step 3 - 리스트에 값을 추가합니다. Step 4 - subList().clear() 메서드를 사용하여 지정한 인덱스 범위의 하위 목록을 제거합니다. Step 5 - 결과를 출력합니다. Step 6 - 종료합니다.
예제 1: main 함수에서 모든 작업 처리
첫 번째 방법은 모든 연산을 main 함수 안에서 한 번에 처리하는 방식입니다.
import java.util.*;
public class Demo {
public static void main(String args[]){
AbstractList<String> input_list = new LinkedList<String>();
input_list.add("Java");
input_list.add("Programming");
input_list.add("Is");
input_list.add("Fun");
System.out.println("정의된 리스트: " + input_list);
input_list.subList(2, 4).clear();
System.out.println("하위 목록 제거 후 리스트: " + input_list);
}
}실행 결과
정의된 리스트: [Java, Programming, Is, Fun] 하위 목록 제거 후 리스트: [Java, Programming]
예제 2: 객체 지향 방식으로 함수 분리
두 번째 방법은 연산 로직을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일로 구현하는 것입니다. 코드의 재사용성과 가독성이 향상됩니다.
import java.util.*;
public class Demo {
static void remove_sublist(AbstractList input_list){
input_list.subList(2, 4).clear();
System.out.println("하위 목록 제거 후 리스트: " + input_list);
}
public static void main(String args[]){
AbstractList<String> input_list = new LinkedList<String>();
input_list.add("Java");
input_list.add("Programming");
input_list.add("Is");
input_list.add("Fun");
System.out.println("정의된 리스트: " + input_list);
remove_sublist(input_list);
}
}실행 결과
정의된 리스트: [Java, Programming, Is, Fun] 하위 목록 제거 후 리스트: [Java, Programming]
핵심 포인트 정리
subList(startIndex, endIndex) 메서드는 시작 인덱스부터 종료 인덱스 직전까지의 요소를 포함하는 뷰(view)를 반환합니다. 이 뷰에 대해 clear()를 호출하면 원본 리스트에서 해당 범위의 요소가 함께 제거됩니다. 두 예제 모두 동일한 결과를 출력하지만, 기능별로 함수를 분리하면 코드 유지보수 측면에서 더 유리합니다.