개요
이 글에서는 자바(Java)에서 리스트(List)의 요소를 회전하는 방법을 알아봅니다. List는 Collection을 확장(extends)한 인터페이스로, 요소들을 순서대로 저장하는 컬렉션의 동작을 정의합니다. Collection은 객체 그룹을 저장하고 조작할 수 있는 아키텍처를 제공하는 프레임워크로, 검색, 정렬, 삽입, 조작, 삭제 등 데이터와 관련된 거의 모든 연산을 지원합니다.
여기서 말하는 '회전(rotation)'이란 리스트의 마지막 요소를 맨 앞으로 이동시키고, 나머지 요소들을 한 칸씩 뒤로 밀어내는 연산을 의미합니다.
예제 미리 보기
입력값이 다음과 같다고 가정해 보겠습니다.
입력 리스트: [100, 150, 200, 250, 300]
원하는 출력 결과는 다음과 같습니다.
1회 회전 후 리스트: [150, 200, 250, 300, 100]
알고리즘
Step 1 - 시작(START) Step 2 - input_list라는 이름의 리스트를 선언한다. Step 3 - 리스트에 값을 정의한다. Step 4 - 리스트를 반복(iterate)하며 'get' 메서드를 사용해 특정 인덱스의 요소를 가져온다. Step 5 - 해당 값을 새 변수 'temp'에 할당한다. Step 6 - 리스트의 끝부터 역순으로 반복하며 각 인덱스의 요소를 가져오고, 'set' 메서드를 사용해 값을 한 칸씩 뒤로 이동시킨다. Step 7 - 결과를 출력한다. Step 8 - 종료(STOP)
예제 1: main 메서드에서 모든 로직 처리
첫 번째 방식은 모든 연산을 하나의 main 메서드 안에서 직접 처리하는 절차적 접근 방식입니다.
import java.util.*;
public class Demo {
public static void main(String[] args){
List<Integer> input_list = new ArrayList<>();
input_list.add(100);
input_list.add(150);
input_list.add(200);
input_list.add(250);
input_list.add(300);
System.out.println("정의된 리스트: " + Arrays.toString(input_list.toArray()));
for (int i = 0; i < 4; i++) {
int temp = input_list.get(4);
for (int j = 4; j > 0; j--) {
input_list.set(j, input_list.get(j - 1));
}
input_list.set(0, temp);
}
System.out.println("1회 회전 후 리스트: " + Arrays.toString(input_list.toArray()));
}
}출력 결과
정의된 리스트: [100, 150, 200, 250, 300] 1회 회전 후 리스트: [150, 200, 250, 300, 100]
예제 2: 객체 지향 방식으로 캡슐화
두 번째 방식은 회전 로직을 별도의 메서드로 분리하여 객체 지향 프로그래밍(OOP) 원칙에 따라 코드의 재사용성과 가독성을 높인 예제입니다.
import java.util.*;
public class Demo {
static void rotate(List<Integer> input_list){
for (int i = 0; i < 4; i++) {
int temp = input_list.get(4);
for (int j = 4; j > 0; j--) {
input_list.set(j, input_list.get(j - 1));
}
input_list.set(0, temp);
}
System.out.println("
1회 회전 후 리스트: " + Arrays.toString(input_list.toArray()));
}
public static void main(String[] args){
List<Integer> input_list = new ArrayList<>();
input_list.add(100);
input_list.add(150);
input_list.add(200);
input_list.add(250);
input_list.add(300);
System.out.println("정의된 리스트: " + Arrays.toString(input_list.toArray()));
rotate(input_list);
}
}출력 결과
정의된 리스트: [100, 150, 200, 250, 300] 1회 회전 후 리스트: [150, 200, 250, 300, 100]
참고: Collections.rotate() 활용하기
직접 구현하지 않고 자바 표준 라이브러리를 사용하고 싶다면 Collections.rotate() 메서드를 활용할 수 있습니다. 이 메서드는 지정한 거리만큼 리스트의 요소를 손쉽게 회전시켜 줍니다.
import java.util.*;
public class Demo {
public static void main(String[] args){
List<Integer> input_list = new ArrayList<>(Arrays.asList(100, 150, 200, 250, 300));
Collections.rotate(input_list, 1); // 오른쪽으로 1칸 회전
System.out.println("1회 회전 후 리스트: " + input_list);
}
}위 코드 역시 동일하게 [150, 200, 250, 300, 100]을 출력하며, 음수 값을 전달하면 반대 방향(왼쪽)으로 회전할 수 있다는 장점이 있습니다.
마무리
이처럼 자바에서 리스트 요소를 회전하는 방법은 크게 두 가지로 나눌 수 있습니다. 하나는 get()과 set() 메서드를 활용해 직접 구현하는 방식이고, 다른 하나는 Collections.rotate() 유틸리티를 사용하는 방식입니다. 학습 목적이라면 직접 구현을 통해 내부 동작 원리를 이해하고, 실무에서는 표준 라이브러리를 활용해 간결하고 안정적인 코드를 작성하는 것을 권장합니다.