YAML은 무엇을 위해 사용됩니까?
또 다른 텍스트 데이터 형식은 YAML( Yet Another Markup Language ; 나중에 YAML Ai't Markup Language )입니다. 네트워크를 통한 전송을 위해 개체를 직렬화하는 데 사용됩니다(XML 및 JSON이 이 방식으로 사용되는 것처럼). 사람이 읽을 수 있기 때문에 Docker, Kubernetes, Ansible 등과 같은 구성 파일을 작성하는 데에도 사용됩니다. YAML을 파일(예: 구성 파일)에 저장해야 하는 경우 두 가지 중 하나를 사용합니다. 확장자: .yaml 또는 .yml.
언어 구문
XML에서 꺾쇠 괄호( <> )는 태그를 지정하는 데 사용됩니다. JSON에서는 중괄호( {} )를 사용합니다. YAML은 새 줄과 들여쓰기를 사용합니다.
데이터는 키-값 쌍으로 저장되며 여기서 키는 문자열이고 값은 다양한 데이터 유형(문자열, 숫자, 참/거짓, 배열 등)이 될 수 있습니다. 키는 따옴표 없이 작성됩니다.
정보가 YAML에 저장되는 방식을 살펴보겠습니다.
유형 | 자바 | YAML |
---|---|---|
정수 |
|
번호: 5
|
분수 |
|
번호: 4.3
|
부울 변수 |
|
유효: 거짓
유효: 아니요 유효: 꺼짐 * 유효한 부울 값: 참/거짓, 예/아니오, 켜기/끄기. |
끈 |
|
도시: 뉴욕
시: '뉴욕' 도시: "뉴욕" * 세 가지 옵션 모두 동일합니다. |
특수 문자가 포함된 문자열 |
|
줄: "aaa\nbbb"
|
코드의 주석 |
|
# 논평
|
물체 |
* 객체의 클래스를 부여하여 객체의 구조를 볼 수 있습니다. |
사람:
이름: "데니스" 나이: 32 * 속성 앞 들여쓰기에 주의하세요. 모든 속성에 대해 동일해야 합니다. |
단순 값 목록 |
|
나이: [1, 3,5,9,78, -5]
나이: - 1 - 3 - 5 - 9 - 78 - -5 * 두 옵션 모두 동일합니다. |
개체 목록 |
|
사람들:
- 이름: "Ian" 나이: 21 - 이름: "Marina" 나이: 25 - 이름: "Owen" 나이: 73 |
Java에서와 마찬가지로 목록의 요소는 목록이 될 수 있습니다. 즉, 객체는 서로 중첩될 수 있습니다. 목록의 다음 요소를 나타내는 하이픈은 상위 키를 기준으로 수평으로 오프셋되거나 바로 아래에 위치할 수 있습니다. 가장 중요한 것은 모든 요소의 형식이 동일하다는 것입니다. 이렇게 하면 혼란과 모호한 중첩 계층 구조를 피하는 데 도움이 됩니다.
연령:
- 1 - 3 - 5 - 9 - 78 - -5 |
연령:
- 1 - 3 - 5 - 9 - 78 - -5 |
텍스트 값으로 작업할 때 두 가지 뉘앙스가 더 있습니다.
-
여러 줄 텍스트. 다음과 같이 텍스트를 저장할 수 있습니다.
multilineText: "라인 1\n라인 2\n....라인 n"그러나 그것을 읽으려고 시도하는 것은 매우 불쾌할 것입니다. 그래서 | (파이프) 기호: 텍스트를 다르게 작성하는 데 사용할 수 있습니다.
여러 줄 텍스트: |
라인 1
라인 2
....
라인 n두 번째 옵션이 더 편리하다는 데 동의하시겠죠?
-
긴 줄. 텍스트를 한 줄에 유지하면서 IDE의 보이는 작업 공간에도 맞추려면 > (보다 큼) 기호를 사용할 수 있습니다.
singlelineText: >
시작
...
같은 줄 계속
...
종료모든 텍스트는 한 줄로 처리됩니다.
여러 YAML 데이터 구조를 하나의 파일에 작성해야 하는 경우 --- (하이픈 3개) 로 구분해야 합니다 . 실제로 이것이 필요한 경우는 거의 없지만 이러한 가능성을 인식하는 것이 가장 좋습니다.
YAML 문서의 예
Java 데이터 구조(클래스)와 해당 객체를 생성하고 객체를 YAML로 표현해 봅시다.
class Family {
private Date weddingDate;
private Person wife;
private Person husband;
private List<Person> children;
// Getters and setters are omitted
}
class Person {
private final String name;
private final boolean isWoman;
private int age;
public Person(String name, int age, boolean isWoman) {
this.name = name;
this.age = age;
this.isWoman = isWoman;
}
// Getters and setters are omitted
}
public static void main(String[] args) {
Person wife = new Person("Ann", 37, true);
Person husband = new Person("Alex", 40, false);
var children = List.of(
new Person("Iris", 12, true),
new Person("Olivia", 5, true)
);
Date weddingDate = new Date(/* some long */);
Family family = new Family();
family.setWeddingDate(weddingDate);
family.setWife(wife);
family.setHusband(husband);
family.setChildren(children);
}
YAML의 유효한 표현:
weddingDate: 2000-12-03
아내:
이름: Ann
나이: 37
isWoman: 예
남편:
이름: Alex
나이: 40
isWoman:
자녀 없음:
- 이름: Iris
나이: 12
isWoman: true
- 이름: Olivia
나이: 5
isWoman: 사실
---