[java] Jansi를 이용하여 자바에서 텍스트가 확대/축소되는 애니메이션 만들기

이번 포스트에서는 Jansi 라이브러리를 사용하여 자바에서 텍스트가 확대/축소되는 애니메이션을 만드는 방법에 대해 알아보겠습니다. Jansi는 ANSI 이스케이프 시퀀스를 이용하여 콘솔에 색상 및 스타일을 적용하는 데 도움이 되는 라이브러리입니다.

Jansi 설정하기

먼저 Jansi를 프로젝트에 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음 의존성을 추가합니다:

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

Gradle을 사용한다면 build.gradle 파일에 다음 의존성을 추가합니다:

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

애니메이션 코드 작성하기

텍스트가 확대/축소되는 애니메이션을 만들기 위해 다음과 같은 간단한 코드를 작성할 수 있습니다:

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

public class TextAnimation {

    public static void main(String[] args) throws InterruptedException {
        // Jansi 초기화
        AnsiConsole.systemInstall();

        // 애니메이션 루프
        while (true) {
            // 텍스트 확대/축소 비율
            for (float scale = 0.5f; scale <= 2.0f; scale += 0.1f) {
                // 텍스트 출력
                printScaledText(scale);

                // 100ms 딜레이
                Thread.sleep(100);
            }
        }
    }

    private static void printScaledText(float scale) {
        // ANSI 이스케이프 시퀀스를 사용하여 텍스트 출력
        String text = "Hello, World!";
        Ansi ansi = Ansi.ansi().eraseScreen().fg(Ansi.Color.GREEN).a(text).reset();
        System.out.print(ansi.cursor(1, 1).cursorLeft(text.length() / 2).a(ansi.scale(scale).a(text)).reset());
    }
}

위 코드는 애니메이션 루프를 생성하고, 텍스트를 확대/축소하여 출력하는 기능을 제공합니다. printScaledText 메소드에서는 Jansi 라이브러리의 Ansi 클래스를 사용하여 ANSI 이스케이프 시퀀스를 생성하고, 확대/축소 비율에 맞게 텍스트를 출력합니다. Thread.sleep(100)은 각 프레임 간의 딜레이를 조절하는 역할을 합니다.

실행하기

위의 코드를 실행하면 텍스트가 확대/축소되는 애니메이션을 볼 수 있습니다. 애니메이션이 계속해서 반복되며, 텍스트의 크기가 점차 변화하는 것을 확인할 수 있습니다.

마무리

이번 포스트에서는 Jansi를 사용하여 자바에서 텍스트가 확대/축소되는 애니메이션을 만드는 방법에 대해 알아보았습니다. Jansi를 사용하면 콘솔 화면에 색상과 스타일을 적용하는 데 유용하며, 텍스트 애니메이션과 같은 효과를 쉽게 구현할 수 있습니다.

더 자세한 정보나 Jansi의 기능에 대해 알고 싶다면 Jansi GitHub 페이지를 참고하시기 바랍니다.