[java] Jansi를 활용하여 자바 애플리케이션에서 터미널 창 크기 조정하기

Jansi는 자바를 사용하여 콘솔에서 ANSI 이스케이프 시퀀스를 사용할 수 있게 해주는 라이브러리입니다. 이를 활용하면 자바 애플리케이션에서 터미널 창의 크기를 동적으로 조정할 수 있습니다. 이번 글에서는 Jansi를 사용하여 자바 애플리케이션에서 터미널 창 크기를 조정하는 방법에 대해 알아보겠습니다.

Jansi 라이브러리 추가하기

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

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

Gradle을 사용한다면 build.gradle 파일에 다음과 같이 의존성을 추가하면 됩니다.

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

의존성을 추가한 후에는 빌드 도구를 통해 Jansi를 다운로드하고 프로젝트에 적용합니다.

터미널 창 크기 조정하기

터미널 창의 크기를 조정하기 위해서는 Jansi의 AnsiConsole 클래스를 사용합니다. 다음은 자바 애플리케이션에서 터미널 창의 크기를 변경하는 예제 코드입니다.

import org.fusesource.jansi.AnsiConsole;

public class TerminalResizeExample {
    public static void main(String[] args) {
        AnsiConsole.systemInstall();

        // 터미널 창의 크기를 80x40으로 설정
        System.out.print("\033[8;40;80t");

        // 터미널 창 크기 변경 후에는 sleep 등을 사용하여 시간적 여유를 줄 것을 권장합니다.
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        AnsiConsole.systemUninstall();
    }
}

위의 코드에서 AnsiConsole.systemInstall()으로 AnsiConsole을 활성화하고 터미널 창 크기를 변경하는 ANSI 이스케이프 시퀀스 \033[8;40;80t를 출력합니다. 이후, AnsiConsole.systemUninstall()로 AnsiConsole을 비활성화합니다.

실행 결과

위의 예제 코드를 실행하면 터미널 창의 크기가 80x40으로 변경되는 것을 확인할 수 있습니다.

결론

Jansi를 사용하면 자바 애플리케이션에서 터미널 창 크기를 조정할 수 있습니다. 이를 활용하면 터미널 기반의 사용자 인터페이스를 개발할 때 더욱 다양한 기능을 구현할 수 있습니다. 또한, 터미널 창 크기 조정 이외에도 Jansi를 활용하여 ANSI 이스케이프 시퀀스를 사용할 수 있으므로, 다양한 터미널 제어 작업에 유용하게 활용할 수 있습니다.

참고 자료