[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 기능을 구현할 수 있습니다.