[java] Jansi를 이용하여 자바에서 터미널 창에 로딩바 표시하는 방법

이번 포스트에서는 Jansi 라이브러리를 사용하여 자바 어플리케이션에서 터미널 창에 로딩바를 표시하는 방법을 알아보겠습니다. Jansi는 자바에서 ANSI escape sequences를 사용할 수 있게 해주는 라이브러리로, 터미널에서 텍스트 스타일링이나 커서 제어 등을 할 수 있습니다.

1. Jansi 라이브러리 추가하기

먼저, Jansi 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>org.fusesource.jansi</groupId>
    <artifactId>jansi</artifactId>
    <version>1.18</version>
</dependency>

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가합니다:

dependencies {
    implementation 'org.fusesource.jansi:jansi:1.18'
}

의존성을 추가한 후, 프로젝트를 빌드합니다.

2. 로딩바 클래스 작성하기

이제 로딩바를 표시할 클래스를 작성해보겠습니다. 다음은 간단한 예제입니다:

import org.fusesource.jansi.Ansi;
import org.fusesource.jansi.AnsiConsole;

public class LoadingBar {

    public void showLoadingBar() {
        AnsiConsole.systemInstall(); // Jansi 초기화

        int totalSteps = 10;
        for (int i = 1; i <= totalSteps; i++) {
            // 현재 스텝의 백분율 계산
            int percent = (i * 100) / totalSteps;

            // 로딩바 표시
            String progressBar = getProgressBar(percent);
            AnsiConsole.out.print("\r" + progressBar + " " + percent + "%");
            AnsiConsole.out.flush();

            // 1초간 대기
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        AnsiConsole.out.println("\n로딩 완료");
        AnsiConsole.systemUninstall(); // Jansi 정리
    }

    private String getProgressBar(int percent) {
        int completed = percent / 10;
        int remaining = 10 - completed;

        StringBuilder progressBar = new StringBuilder("[");
        for (int i = 0; i < completed; i++) {
            progressBar.append("=");
        }
        for (int i = 0; i < remaining; i++) {
            progressBar.append(" ");
        }
        progressBar.append("]");

        return progressBar.toString();
    }

    public static void main(String[] args) {
        LoadingBar loadingBar = new LoadingBar();
        loadingBar.showLoadingBar();
    }
}

위의 코드는 1부터 10까지의 총 10개의 스텝으로 이루어진 로딩바를 표시하는 예제입니다. showLoadingBar 메서드에서는 Jansi를 초기화한 후, 각 스텝마다 로딩바를 표시하고 1초를 대기합니다. 마지막으로 로딩 완료 메시지를 출력한 후 Jansi를 정리합니다.

3. 실행하기

위의 예제 코드를 실행해보면 터미널 창에 로딩바가 표시되는 것을 확인할 수 있습니다. 로딩바는 각 스텝마다 업데이트되며, 터미널에 출력되는 메시지도 Jansi를 이용하여 스타일링되어 보기 좋게 표시됩니다.

결론

Jansi 라이브러리를 이용하여 자바 어플리케이션에서 터미널 창에 로딩바를 표시할 수 있습니다. Jansi를 초기화하고 로딩바를 업데이트하는 방법을 알아보았으며, 이를 응용하여 다양한 터미널 UI 기능을 구현할 수 있습니다.