이 글에서는 자바에서 컬렉션(Collection)을 뒤집는 방법을 단계별로 알아보겠습니다. 컬렉션은 객체 그룹을 저장하고 조작할 수 있는 아키텍처를 제공하는 자바의 핵심 프레임워크입니다. 자바 컬렉션을 활용하면 검색, 정렬, 삽입, 조작, 삭제 등 데이터와 관련된 거의 모든 작업을 손쉽게 수행할 수 있습니다.
리스트를 뒤집는 작업은 Collections.reverse()라는 내장 메서드 하나만으로 간단하게 처리할 수 있으며, 이 메서드는 원본 리스트 자체의 요소 순서를 제자리(in-place)에서 반전시킵니다.
아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.
입력 및 출력 예시
입력값이 다음과 같다고 가정해 보겠습니다.
Input list:[Java, program, is, fun]
이때 원하는 출력 결과는 다음과 같습니다.
The list after reversing is: [fun, is, program, Java]
알고리즘
Step 1 - START Step 2 - input_list라는 이름의 리스트를 선언한다. Step 3 - 리스트에 값을 정의한다. Step 4 - 내장 함수 Collections.reverse()에 input_list를 매개변수로 전달하여 리스트를 뒤집는다. Step 5 - 결과를 화면에 출력한다. Step 6 - STOP
예제 1: main 함수에서 모든 로직 처리하기
첫 번째 예제는 모든 연산을 main 함수 안에서 한 번에 처리하는 절차적 방식입니다. 코드가 짧고 직관적이라 초보자가 이해하기 좋습니다.
import java.util.*;
public class Demo {
public static void main(String[] args){
List<String> input_list = new ArrayList<String>();
input_list.add("Java");
input_list.add("program");
input_list.add("is");
input_list.add("fun");
System.out.println("The list is defined as:" + input_list);
Collections.reverse(input_list);
System.out.println("\nThe list after reversing is: \n" + input_list);
}
}실행 결과
The list is defined as:[Java, program, is, fun] The list after reversing is: [fun, is, program, Java]
예제 2: 객체 지향 방식으로 함수 분리하기
두 번째 예제는 뒤집기 로직을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일을 적용한 방식입니다. 기능이 모듈화되어 있어 코드 재사용성과 유지보수성이 뛰어나며, 실무에서 권장되는 구조입니다.
import java.util.*;
public class Demo {
static void reverse_list(List<String> input_list){
Collections.reverse(input_list);
System.out.println("\nThe list after reversing is: \n" + input_list);
}
public static void main(String[] args){
List<String> input_list = new ArrayList<String>();
input_list.add("Java");
input_list.add("program");
input_list.add("is");
input_list.add("fun");
System.out.println("The list is defined as:" + input_list);
reverse_list(input_list);
}
}실행 결과
The list is defined as:[Java, program, is, fun] The list after reversing is: [fun, is, program, Java]
핵심 포인트 정리
Collections.reverse()는 java.util 패키지의 Collections 클래스에 포함된 정적(static) 메서드로, 리스트의 요소 순서를 반대로 뒤집습니다. 주요 특징은 다음과 같습니다.
- 제자리(in-place) 반전: 새로운 리스트를 생성하지 않고 원본 리스트의 순서를 직접 변경합니다.
- 시간 복잡도 O(n): 리스트 크기에 비례하여 선형 시간 안에 처리됩니다.
- List 전용: ArrayList, LinkedList 등 List 인터페이스를 구현한 컬렉션에만 사용할 수 있습니다.
- 원본 변경 주의: 원본 리스트가 수정되므로, 원본을 유지해야 한다면 먼저 복사본을 만들어 사용하는 것이 좋습니다.
두 예제 모두 동일한 결과를 출력하지만, 상황에 따라 절차적 방식과 객체 지향 방식 중 적합한 스타일을 선택하면 됩니다. 간단한 스크립트성 코드에는 예제 1이, 규모가 있는 프로젝트에는 예제 2처럼 기능을 분리하는 것이 바람직합니다.