Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Collections.shuffle()로 컬렉션 요소를 무작위로 섞는 방법

이 글에서는 Java에서 컬렉션(Collection)의 요소들을 무작위로 섞는(shuffle) 방법을 알아보겠습니다.

컬렉션 프레임워크는 객체 그룹을 저장하고 조작할 수 있는 아키텍처를 제공합니다. Java 컬렉션을 활용하면 검색, 정렬, 삽입, 조작, 삭제 등 데이터에 수행하는 거의 모든 작업을 손쉽게 처리할 수 있습니다.

요소를 섞을 때는 java.util.Collections 클래스가 제공하는 shuffle() 메서드를 사용합니다. 이 메서드는 리스트의 요소 순서를 무작위로 재배열하며, 필요에 따라 난수 생성기(Random)를 직접 지정할 수도 있습니다.

동작 예시

입력 리스트:

Input list: [Java, program, is, fun, and, easy]

실행 결과(출력은 매번 달라집니다):

The shuffled list is:
[is, easy, program, and, fun, Java]

알고리즘

Step 1 - 시작
Step 2 - ArrayList인 input_list를 선언한다.
Step 3 - 값을 정의한다.
Step 4 - shuffle() 함수를 사용해 리스트의 요소를 섞는다.
Step 5 - 결과를 출력한다.
Step 6 - 종료

예제 1: main 함수에서 모든 로직 처리

첫 번째 예제는 모든 연산을 main 함수 안에서 한 번에 처리하는 방식입니다.

import java.util.*;
public class Demo {
    public static void main(String[] args){
        ArrayList<String> input_list = new ArrayList<String>();
        input_list.add("Java");
        input_list.add("program");
        input_list.add("is");
        input_list.add("fun");
        input_list.add("and");
        input_list.add("easy");
        System.out.println("The list is defined as:" + input_list);
        Collections.shuffle(input_list, new Random());
        System.out.println("The shuffled list is: \n" + input_list);
    }
}

출력 결과

The list is defined as:[Java, program, is, fun, and, easy]
The shuffled list is:
[is, Java, fun, program, easy, and]

예제 2: 객체 지향 방식으로 함수 분리

두 번째 예제는 셔플 로직을 별도의 함수로 분리하여 객체 지향 프로그래밍(OOP) 스타일로 구현한 것입니다. 이렇게 하면 코드의 재사용성과 가독성이 향상됩니다.

import java.util.*;
public class Demo {
    static void shuffle(ArrayList<String> input_list){
        Collections.shuffle(input_list, new Random());
        System.out.println("The shuffled list is: \n" + input_list);
    }
    public static void main(String[] args){
        ArrayList<String> input_list = new ArrayList<String>();
        input_list.add("Java");
        input_list.add("program");
        input_list.add("is");
        input_list.add("fun");
        input_list.add("and");
        input_list.add("easy");
        System.out.println("The list is defined as:" + input_list);
        shuffle(input_list);
    }
}

출력 결과

The list is defined as:[Java, program, is, fun, and, easy]
The shuffled list is:
[fun, and, Java, easy, is, program]

정리

Collections.shuffle() 메서드를 사용하면 단 한 줄의 코드로 리스트의 요소를 무작위로 섞을 수 있습니다. 두 번째 인자로 Random 객체를 전달하면 난수 생성 방식을 직접 제어할 수 있으며, 시드(seed)를 고정하면 실행할 때마다 동일한 셔플 결과를 얻을 수도 있습니다. 카드 게임, 퀴즈 문항 순서 변경, 추천 항목 랜덤 노출 등 다양한 상황에서 유용하게 활용할 수 있습니다.