[java] SnakeYAML을 사용하여 YAML 파일의 객체 생성하기

YAML은 인간이 쉽게 읽고 쓸 수 있는 데이터 직렬화 형식입니다. Java에서는 SnakeYAML 라이브러리를 사용하여 YAML 파일을 쉽게 파싱하고 객체로 변환할 수 있습니다.

SnakeYAML 라이브러리 추가하기

SnakeYAML 라이브러리를 사용하기 위해서는 먼저 Maven 또는 Gradle과 같은 빌드 도구에 의존성을 추가해야 합니다. 다음은 Maven을 사용하는 경우의 의존성을 추가하는 예시입니다.

<dependencies>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.27</version>
    </dependency>
</dependencies>

YAML 파일 작성하기

먼저 YAML 파일을 작성해야 합니다. 예를 들어, 다음과 같은 YAML 파일이 있다고 가정해보겠습니다.

# config.yml
server:
  ip: "127.0.0.1"
  port: 8080
  timeout: 5000

YAML 파일 파싱하기

다음으로, SnakeYAML을 사용하여 YAML 파일을 파싱하고 Java 객체로 변환해야 합니다. 다음은 위에서 작성한 config.yml 파일을 파싱하여 ServerConfig 객체로 변환하는 예시입니다.

import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) {
        try {
            // YAML 파일 읽기
            Yaml yaml = new Yaml();
            FileInputStream fileInputStream = new FileInputStream("config.yml");

            // YAML 파일 파싱하여 객체 생성
            ServerConfig serverConfig = yaml.loadAs(fileInputStream, ServerConfig.class);

            // 생성된 객체 사용
            System.out.println("Server IP: " + serverConfig.getServer().getIp());
            System.out.println("Server Port: " + serverConfig.getServer().getPort());
            System.out.println("Server Timeout: " + serverConfig.getServer().getTimeout());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

public class ServerConfig {
    private Server server;

    // Getter, Setter 생략

    public static class Server {
        private String ip;
        private int port;
        private int timeout;

        // Getter, Setter 생략

    }
}

위 예시 코드에서는 config.yml YAML 파일을 FileInputStream으로 읽어들이고, Yaml 객체를 사용하여 loadAs 메서드를 호출하여 ServerConfig 클래스로 객체를 생성합니다. 생성된 객체는 getServer()를 통해 접근할 수 있으며, 필요한 정보를 출력하는 예시입니다.

SnakeYAML을 사용하여 YAML 파일의 객체를 생성하는 방법에 대해 알아보았습니다. YAML 파일에 저장된 정보를 Java 객체로 변환하는 것은 개발 과정에서 매우 유용하며, 간단한 설정 파일부터 복잡한 데이터 구조까지 다양한 용도로 사용할 수 있습니다.

참고 자료