CodeGym /Java Blog /무작위의 /자바 직렬화 형식
John Squirrels
레벨 41
San Francisco

자바 직렬화 형식

무작위의 그룹에 게시되었습니다
안녕! 직렬화에 대해 알아보겠습니다. 직렬화에 대한 강의가 이미 있었다는 것을 기억하실 것입니다. 그래서 우리는 했습니다 :) 여기 첫 번째가 있습니다 그리고 여기 두 번째가 있습니다. 직렬화가 어떻게 작동하는지, 왜 직렬화가 필요한지, 직렬화를 위해 Java에 어떤 도구가 있는지 잘 기억나지 않는 경우 이 단원을 통해 실행할 수 있습니다. 오늘 수업은 이론에 관한 것입니다. 직렬화 형식에 대해 자세히 살펴보겠습니다. 먼저 직렬화가 무엇인지 생각해 봅시다. 직렬화는 개체의 상태를 일련의 바이트로 저장하는 프로세스입니다. 역직렬화는 이러한 바이트에서 개체를 복원하는 프로세스입니다. Java 개체는 직렬화되어 네트워크를 통해(예: 다른 컴퓨터로) 전송될 수 있습니다. 바이트 시퀀스는 다른 형식으로 표시될 수 있습니다. 일반적인 컴퓨터 사용을 통해 이 개념에 익숙합니다. 예를 들어, 전자책(또는 간단한 텍스트 문서)은 다양한 형식으로 작성할 수 있습니다.
  • docx(마이크로소프트 워드 형식);
  • pdf(Adobe 형식);
  • mobi(Amazon Kindle 장치에서 일반적으로 사용됨)
  • 그리고 훨씬 더 (ePub, djvu, fb2 등).
각각의 경우 목표는 동일해 보입니다. 즉, 사람이 읽을 수 있는 형식으로 텍스트를 표시하는 것입니다. 그럼에도 불구하고 사람들은 다양한 형식을 많이 발명했습니다. 그들이 하는 일의 세부 사항에 들어가지 않고 우리는 그들이 그럴 만한 이유가 있었다고 추측할 수 있습니다. 각 형식은 다른 형식과 비교할 때 고유한 장점과 단점이 있습니다. 동일한 원칙에 따라 다양한 직렬화 형식이 만들어졌을까요? 훌륭한 추측입니다, 학생! :) 맞습니다. 실제로 유선(또는 무선)을 통해 데이터를 전송하는 것은 까다로운 작업이며 많은 요소가 관련되어 있습니다. 데이터를 보내는 사람은 누구입니까? 어디로? 어떤 볼륨? 수신자는 사람입니까 아니면 컴퓨터입니까(예: 데이터를 사람이 읽을 수 있어야 함)? 어떤 장치가 데이터를 읽을 것인가? 분명히 이러한 상황은 다릅니다. 한 스마트폰에서 다른 스마트폰으로 500KB 이미지를 보내는 것은 한 가지입니다. 최적으로 압축하고 가능한 한 빨리 전송해야 하는 500테라바이트의 비즈니스 데이터에 대해 이야기하는 경우에는 완전히 다른 것입니다. 주요 직렬화 형식에 대해 알아보고 각 형식의 장단점을 고려해 봅시다!

JSON

자바스크립트 객체 표기법. 당신은 이미 이 형식에 대해 조금 알고 있습니다! 우리는 이 수업 에서 그것에 대해 이야기했고 바로 여기에서 JSON으로의 직렬화를 다루었습니다 . 이유 때문에 이름을 얻었습니다. JSON으로 변환된 Java 객체는 실제로 JavaScript의 객체와 똑같이 보입니다. 개체를 이해하기 위해 JavaScript를 알 필요는 없습니다.

{
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
}
우리는 단일 객체를 보내는 것에 국한되지 않습니다. JSON 형식은 개체 배열을 나타낼 수도 있습니다.

[
 {
   "title": "War and Peace",
   "author": "Lev Tolstoy",
   "year": 1869
 },

 {
   "title": "Demons",
   "author": "Fyodor Dostoyevsky",
   "year": 1872
 },

 {
   "title": "The Seagull",
   "author": "Anton Chekhov",
   "year": 1896
 }
]
JSON은 JavaScript 개체를 나타내므로 다음 JavaScript 데이터 형식을 지원합니다.
  • 문자열;
  • 숫자;
  • 사물;
  • 배열;
  • 부울(참 및 거짓);
  • 없는.
JSON의 이점은 무엇입니까?
  1. 사람이 읽을 수 있는 형식. 최종 사용자가 인간인 경우 이는 명백한 이점입니다. 예를 들어 서버에 비행 일정이 있는 데이터베이스가 있다고 가정합니다. 집에서 자신의 컴퓨터에 앉아 있는 인간 고객은 웹 애플리케이션을 사용하여 이 데이터베이스에서 데이터를 요청합니다. 그가 이해할 수 있는 형식으로 데이터를 제공해야 하기 때문에 JSON은 훌륭한 솔루션입니다.

  2. 간단. 매우 간단합니다 :) 위에서 우리는 두 개의 JSON 파일의 예를 들었습니다. 그리고 JavaScript(JavaScript 객체는 말할 것도 없고)에 대해 들어본 적이 없더라도 거기에 설명된 객체 종류를 쉽게 이해할 수 있습니다.
    전체 JSON 문서는 몇 장의 사진이 있는 웹 페이지 로 구성됩니다.

  3. 널리 사용됩니다. JavaScript는 지배적인 프런트 엔드 언어이며 자체 요구 사항이 있습니다. JSON을 사용하는 것은 필수입니다. 따라서 수많은 웹 서비스에서 JSON을 데이터 교환 형식으로 사용합니다. 모든 최신 IDE는 JSON 형식(IntelliJ IDEA 포함)을 지원합니다. JSON으로 작업할 수 있도록 모든 종류의 프로그래밍 언어에 대해 많은 라이브러리가 작성되었습니다.

예를 들어 Java 개체를 JSON으로 직렬화하는 방법을 배웠던 수업에서 이미 Jackson 라이브러리로 작업했습니다. 그러나 Jackson 외에도 Google의 매우 편리한 라이브러리인 GSON이 있습니다.

YAML

처음에 YAML은 "Yet Another Markup Language"의 약자였습니다. 시작 당시에는 XML의 경쟁자로 자리 잡았습니다. 이제 시간이 지남에 따라 YAML은 "YAML은 마크업 언어가 아닙니다"를 의미하게 되었습니다. 정확히 무엇입니까? 컴퓨터 게임에서 캐릭터를 나타내기 위해 Warrior, Mage, Thief라는 3개의 클래스를 만들어야 한다고 상상해 봅시다. 그들은 힘, 민첩성, 지구력, 무기 세트와 같은 특성을 갖습니다. 클래스를 설명하는 YAML 파일은 다음과 같습니다.

classes:
 class-1:
   title: Warrior
   power: 8
   agility: 4
   stamina: 7
   weapons:
     - sword
     - spear
    
 class-2:
   title: Mage
   power: 5
   agility: 7
   stamina: 5
   weapons:
     - magic staff

 class-3:
   title: Thief
   power: 6
   agility: 6
   stamina: 5
   weapons:
     - dagger
     - poison
YAML 파일에는 트리 구조가 있습니다. 일부 요소는 다른 요소에 중첩됩니다. 각 레벨을 나타내는 데 사용하는 특정 수의 공백을 사용하여 중첩을 제어할 수 있습니다. YAML 형식의 장점은 무엇입니까?
  1. 사람이 읽을 수 있습니다. 다시 말하지만 설명 없이 YAML 파일을 보더라도 설명하는 개체를 쉽게 이해할 수 있습니다. YAML은 사람이 읽을 수 있어서 yaml.org 웹사이트는 일반 YAML 파일입니다 :)

  2. 컴팩트함. 파일 구조는 공백을 사용하여 생성됩니다. 대괄호나 인용 부호를 사용할 필요가 없습니다.

  3. 프로그래밍 언어에 대한 기본 데이터 구조를 지원합니다. JSON 및 기타 여러 형식에 비해 YAML의 큰 장점은 다양한 데이터 구조를 지원한다는 것입니다. 여기에는 다음이 포함됩니다.

    • !!map
      중복을 가질 수 없는 정렬되지 않은 키-값 쌍 세트입니다.

    • !!omap
      중복될 수 없는 키-값 쌍의 정렬된 시퀀스입니다.

    • !!pairs:
      중복을 가질 수 있는 키-값 쌍의 정렬된 시퀀스입니다.

    • !!set
      서로 같지 않은 값의 정렬되지 않은 시퀀스입니다.

    • !!seq
      임의 값의 시퀀스.

    Java에서 이러한 구조 중 일부를 인식하게 될 것입니다! :) 이는 프로그래밍 언어의 다양한 데이터 구조를 YAML로 직렬화할 수 있음을 의미합니다.

  4. 앵커 및 별칭 사용 기능

    이러한 마커를 사용하면 YAML 파일에서 일부 요소를 식별한 다음 반복적으로 발생하는 경우 파일의 나머지 부분에서 참조할 수 있습니다. & 기호를 사용하여 앵커를 만들고 *를 사용하여 별칭을 만듭니다 .

    Leo Tolstoy의 책을 설명하는 파일이 있다고 가정합니다. 각 책의 저자 이름을 작성하지 않으려면 간단하게 leo 앵커를 만들고 필요할 때 별칭을 사용하여 참조합니다.

    
    books:
     book-1:
       title: War and Peace
       author: &leo Leo Tolstoy
       year: 1869
    
     book-2:
       title: Anna Karenina
       author: *leo
       year: 1873
    
     book-3:
       title: Family Happiness
       author: *leo
       year: 1859
    

    이 파일이 구문 분석될 때 "Leo Tolstoy" 값이 별칭이 있는 올바른 위치에서 대체됩니다.

  5. YAML은 데이터를 다른 형식으로 포함할 수 있습니다. 예를 들어 JSON:

    
    books: [
            {
              "title": "War and Peace",
              "author": "Leo Tolstoy",
              "year": 1869
            },
    
            {
              "title": "Anna Karenina",
              "author": "Leo Tolstoy",
              "year": 1873
            },
    
            {
              "title": "Family Happiness",
              "author": "Leo Tolstoy",
              "year": 1859
            }
          ]
    

기타 직렬화 형식

XML

이 형식은 태그 트리를 기반으로 합니다.

<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
각 요소는 여는 태그와 닫는 태그(<> 및 </>)로 구성됩니다. 각 요소는 중첩된 요소를 가질 수 있습니다. XML은 JSON 및 YAML만큼 좋은 공통 형식입니다(실제 프로젝트에 대해 이야기하는 경우). XML에 대한 별도의 강의가 있습니다 .

BSON(이진 JSON)

이름에서 알 수 있듯이 BSON은 JSON과 매우 유사하지만 사람이 읽을 수 없으며 이진 데이터를 사용합니다. 결과적으로 이미지 및 기타 첨부 파일을 저장하고 전송하는 데 매우 좋습니다. 또한 BSON은 JSON에서 사용할 수 없는 일부 데이터 유형을 지원합니다. 예를 들어 BSON 파일에는 날짜(밀리초 형식) 또는 JavaScript 코드 조각이 포함될 수 있습니다. 대중적인 MongoDB NoSQL 데이터베이스는 정보를 BSON 형식으로 저장합니다.

위치 기반 프로토콜

경우에 따라 전송되는 데이터의 양을 대폭 줄여야 합니다(예: 데이터가 많고 로드를 줄여야 하는 경우). 이 상황에서 위치 기반 프로토콜을 사용할 수 있습니다. 즉, 매개변수 자체의 이름 없이 매개변수 값을 보낼 수 있습니다.

"Leo Tolstoy" | "Anna Karenina" | 1873
이 형식의 데이터는 전체 JSON 파일보다 몇 배 적은 공간을 차지합니다. 물론 다른 직렬화 형식도 있지만 지금 당장 다 알 필요는 없습니다 :) 응용 프로그램을 개발할 때 현재 산업 표준 형식에 익숙하고 그 장점과 차이점을 기억하는 것이 좋습니다. 또 다른. 이것으로 수업이 끝납니다 :) 오늘 몇 가지 과제를 해결하는 것을 잊지 마세요! 다음 시간까지! :)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION