[java] SnakeYAML을 사용하여 YAML 파일의 객체 시리얼라이즈하기

YAML은 인간이 쉽게 읽고 쓸 수 있는 데이터 직렬화 형식입니다. Java에서는 SnakeYAML 라이브러리를 사용하여 YAML 파일을 읽고 쓰는 작업을 수행할 수 있습니다. 이번 포스트에서는 SnakeYAML을 사용하여 YAML 파일의 객체를 시리얼라이즈하는 방법에 대해 알아보겠습니다.

SnakeYAML 라이브러리 추가하기

SnakeYAML을 사용하기 위해 프로젝트에 해당 라이브러리를 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가하십시오:

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

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가하십시오:

dependencies {
    implementation 'org.yaml:snakeyaml:1.27'
}

YAML 파일에 객체를 작성하기

SnakeYAML을 사용하여 YAML 파일에 객체를 작성하려면 다음 단계를 따르십시오:

  1. 시리얼라이즈할 객체 생성하기
  2. Yaml 객체와 StreamWriter 객체 생성하기
  3. 객체를 YAML 파일로 시리얼라이즈하기
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.constructor.SafeConstructor;
import org.yaml.snakeyaml.introspector.BeanAccess;
import org.yaml.snakeyaml.nodes.Tag;
import org.yaml.snakeyaml.representer.Representer;
import org.yaml.snakeyaml.representer.SafeRepresenter;
import org.yaml.snakeyaml.serializer.Serializer;
import org.yaml.snakeyaml.tokens.Token;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 시리얼라이즈할 객체 생성하기
        User user = new User("John Doe", 30);
        List<String> hobbies = new ArrayList<>();
        hobbies.add("reading");
        hobbies.add("coding");
        user.setHobbies(hobbies);

        // Yaml 객체와 StreamWriter 객체 생성하기
        Yaml yaml = new Yaml(new Constructor(), new Representer(), new DumperOptions(), new Resolver());
        FileWriter writer;
        try {
            writer = new FileWriter("user.yml");
            // 객체를 YAML 파일로 시리얼라이즈하기
            Serializer serializer = new Serializer(yaml);
            serializer.open();
            serializer.serialize(new Token(Tag.MAPPING_START, null, null));
            yaml.serialize(user, writer);
            serializer.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서는 User 클래스의 객체를 YAML 형식으로 작성하여 user.yml 파일에 저장하고 있습니다. User 클래스는 이름과 나이를 가지는 간단한 예제 클래스입니다. Yaml 객체는 SnakeYAML의 주요 클래스로 YAML 파일에 객체를 작성하는 데 사용됩니다. StreamWriter 객체는 YAML 파일을 작성하는 데 사용됩니다.

YAML 파일을 객체로 읽어오기

SnakeYAML을 사용하여 YAML 파일을 읽어와 객체로 만들려면 다음 단계를 따르십시오:

  1. Yaml 객체와 StreamReader 객체 생성하기
  2. YAML 파일을 객체로 디시리얼라이즈하기
import org.yaml.snakeyaml.Yaml;

import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        // Yaml 객체와 StreamReader 객체 생성하기
        Yaml yaml = new Yaml();
        FileReader reader;
        try {
            reader = new FileReader("user.yml");
            // YAML 파일을 객체로 디시리얼라이즈하기
            User user = yaml.loadAs(reader, User.class);
            System.out.println(user);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서는 user.yml 파일을 읽어와 User 객체로 디시리얼라이즈하고 출력하고 있습니다.

마무리

이번 포스트에서는 SnakeYAML을 사용하여 YAML 파일의 객체를 시리얼라이즈 및 디시리얼라이즈하는 방법에 대해 알아보았습니다. SnakeYAML을 사용하면 YAML 형식의 데이터를 손쉽게 다룰 수 있습니다.