직렬화 란 무엇입니까?


149

OOP (Object-Oriented Programming)를 시작하고 OOP 용어에서 직렬화의 의미가 무엇인지 알고 싶습니다.



4
이 기사는 완전한 BS이므로 평가됩니다.
RedAces

Google에서 검색하면 즉각적인 답변을 제공하기 때문에 일반적으로 제거되는 너무 광범위한 질문이 아닌가?
arvymetal

2
@arvymetal 당신이 옳았습니다. 이것은 내가 구글 검색했을 때 첫 번째 결과였다 :) 그리고 그것은 내가 찾던 정확히
R_G

답변:


143

직렬화는 메모리의 객체를 바이트 스트림으로 변환하여 디스크에 저장하거나 네트워크를 통해 전송하는 것과 같은 작업을 수행하는 프로세스입니다.

역 직렬화는 리버스 프로세스입니다. 바이트 스트림을 메모리의 객체로 변환합니다.


46
또한, 동사 MarshalUnmarshal와 동의어 SerializeDeserialize.
wulfgarpro

4
메모리의 객체가 이미 최저 수준의 바이트로 표시되지 않습니까?
mahacoder

3
메모리의 객체는 컴파일러, OS 및 / 또는 하드웨어에 의해 포맷됩니다. 컴파일러를 변경하고 형식을 변경하십시오. 직렬화 된 객체는 코드에 의해 정의 된 형식을 가지므로 형식을 보장 할 수 있습니다. 이는 네트워크를 통해 객체를 전송할 때도 유용합니다. 수신 시스템은 완전히 다른 아키텍처 (따라서 메모리 내 표현)를 가질 수 있습니다.
Andrew Barnett

1
그래서 문자열로 바뀝니 까?
NONAME

1
문자열은 유효한 형식 일 수 있지만 문자열 일 필요는 없습니다. 문자열 자체는 서로 다른 형식 (ASCII, UTF8, UTF16, EBCDIC ...)을 가지며 실제로 개념을 상당히 잘 보여줍니다. 문자열 (메모리 내 객체) abc은 NUL 터미네이터 또는 인코딩 된 길이와 함께 또는없는 것으로 0x61 0x62 0x63(ASCII) 또는 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) 으로 직렬화됩니다 .
Andrew Barnett 20

91

간단히 말해서 직렬화 는 네트워크를 통해 전송되거나 영구 저장소에 저장 될 수 있도록 객체를 바이트 스트림으로 변환하는 프로세스입니다.

역 직렬화는 정반대입니다. 네트워크 또는 지속성 저장소에서 바이트 스트림을 가져와 동일한 상태 의 Object 다시 변환합니다 .

이해해야 할 것은 바이트 스트림이 해석되거나 조작되어 정확히 동일한 객체 / 동일한 상태를 얻는 방법입니다. 이를 달성하기위한 다양한 방법이 있습니다. 그들 중 일부는-

  1. XML : Object를 XML로 변환하거나 네트워크를 통해 전송하거나 파일 / DB에 저장합니다. 그것을 검색하고 같은 상태의 객체로 다시 변환하십시오. Java에서는 JAXB (Java binding for Java binding) 라이브러리를 사용합니다 (java 6부터 JDK와 번들로 제공).
  2. JSON : Object를 JSON (JavaScript Object notation) 으로 변환하여 동일하게 수행 할 수 있습니다 . 다시 사용할 수있는 GSON 라이브러리가 있습니다.
  3. 또는 OOP 언어 자체에서 제공하는 직렬화를 사용할 수 있습니다. 예를 들어 Java에서는 구현 Serializable interface하고 객체 스트림에 쓰도록 객체를 직렬화 할 수 있습니다 .

@AniketThakur 아주 좋은 설명입니다. JSON나도 알지 못하므로 처음부터 배울 수있는 링크를 제공해 주시겠습니까?
Kasun Siyambalapitiya

직렬화에 대해 이야기 할 때마다 항상 Object 만 참조하는 이유는 무엇입니까? 우리는 네트워크를 통해 전송하기 위해 파일을 사용하는 것보다 객체가없는 Functional Language에서 직렬화를 사용합니다.
Pardeep Sharma

1
우선, 왜 객체를 바이트 스트림으로 변환해야합니까? 왜 그렇게하려는 사용자를위한 암시 적 작업이 아닌가?
Aparna Chaganti

1
JSON 또는 XML을 사용할 수 있다면 왜 스트림 바이트로 변환해야합니까? 그런 다음 바이트로 변환하는 대신 JSOn 또는 XML에만 저장합니다.
Muhammad Faizan은

78

그림을 통한 간단한 설명 :

내 개 렉스가 연재된다!

유추에 의한 설명 :

내가 전화로 내 친구와 이야기하고 있고 새 강아지에 대해 이야기한다고 가정 해 봅시다.

여기 내 문제가 있습니다 : 강아지는 살아 숨쉬는 포유류입니다. 전화선을 통해 강아지를 어떻게 전해야합니까? 강아지를 전화 수신기에 물리적으로 넣을 수 없습니다.

대신, 전화로 강아지의 표현을 전달해야합니다. 다시 말해, 나는 내 개 렉스를 직렬화하고 전화선을 통해 직렬화 된 버전의 Rex를 보냅니다.

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

내 강아지의 직렬화-그것은 완벽한 표현입니다.

요약:

직렬화는 기본적으로 내 개 렉스를 다른 객체 (JSON 객체)로 변환 한 다음 전화선을 통해 일련의 1과 0으로 전송할 수 있습니다. NYC의 내 친구는 그 1과 0을 다시 JSON 객체로 변환하여 내 개 렉스를 완벽하게 표현할 수 있습니다.


16

이것을 확인하십시오, 이것은 당신에게 좋은 설명을 줄 것입니다 :

http://en.wikipedia.org/wiki/Serialization

직렬화라는 용어의 가장 일반적인 사용은 이진 객체를 XML (또는 다른 문자열) 표현으로 변환하여 데이터베이스 / 파일에 저장하거나 웹 서비스 호출에서 네트워크를 통해 보낼 수 있다고 생각합니다. 역 직렬화는 XML / 문자열을 다시 개체로 변환하는 역 프로세스입니다.

편집 : 또 다른 용어는 마샬링 / 비 마샬링입니다. 마샬링은 기본적으로 직렬화와 동일한 개념이며 비 정렬 화는 직렬화 해제와 동일합니다.


3
반드시 XML 일뿐 아니라 어떤 표현이든, 심지어 이진 표현 일 수도 있습니다
Matthew Farwell

7

직렬화는 객체를 바이트 스트림으로 변환하여 객체를 저장하거나 메모리, 데이터베이스 또는 파일로 전송 하는 프로세스입니다 . 주요 목적은 필요할 때 다시 만들 수 있도록 객체의 상태를 저장하는 것입니다. 역 프로세스를 역 직렬화라고합니다.

...

이 그림은 전체 직렬화 프로세스를 보여줍니다.

직렬화의 전체 프로세스

...

직렬화를 통해 개발자는 웹 서비스를 통해 원격 애플리케이션으로 오브젝트를 전송하거나 한 도메인에서 다른 도메인으로 오브젝트를 전달하거나 XML 문자열로 방화벽을 통해 오브젝트를 전달하거나 보안 또는 사용자 별 유지 보수와 같은 조치를 수행 할 수 있습니다. 응용 프로그램 간 정보

에서 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(강조 광산)


5

직렬화 는 순서없는 데이터 (예 : 개체)를 일련 의 토큰 으로 변환하여 나중에 원본 데이터를 재구성하는 데 사용할 수있는 프로세스입니다 . 직렬화 된 양식은 대부분 텍스트 문자열이지만 반드시 그럴 필요는 없습니다.


2

직렬화는 객체를 저장 가능한 비트 시퀀스로 변환합니다.

이 시퀀스를 파일, db 또는 네트워크를 통해 전송하여 저장할 수 있습니다.

나중에 실제 객체에 직렬화를 해제하고 필요할 때마다 재사용 할 수 있습니다.

웹 서비스AJAX 가 가장 일반적인 직렬화 예입니다. 클라이언트에 응답을 보내기 전에 개체가 직렬화되었습니다.


1

직렬화는 Java 지원 객체를 파일 지원 양식으로 전송하는 것입니다.

                         (OR)

Java 지원 양식을 네트워크 지원 양식으로 변환. 직렬화의 주요 범위는 데이터를 한 계층에서 다른 계층으로 전송하는 것입니다.


1

직렬화는 Java, C # 또는 기타 (OOP 언어) 지원 개체를 전송 가능한 형식으로 변환하는 프로세스입니다. 이런 방식으로 네트워크를 통해 전송되거나 디스크에 저장됩니다. 클래스를 직렬화 가능하게하려면 직렬화 가능 인터페이스를 구현해야합니다.


Java 또는 C #에만 국한되지 않고 대부분의 프로그래밍 언어에서 직렬화를 사용합니다. 예를 들어 파이썬 피클 모듈에서 동일하게 사용됩니다.
Pardeep Sharma

0

직렬화는 데이터를 선형 "문자열"바이트로 변환합니다.

다른 사람들은 거의 같은 말을했지만 컴퓨터 모델은 데이터가 1 ​​차원 적으로 어드레스 된 RAM이나 영구 저장소에 맞아야한다고 강조했다.

"데이터"인 대부분의 것은 본질적으로 직렬화 가능합니다 (추상 모델을 선형 모델로 줄여야하더라도). 직렬화 할 수없는 것은 네트워크 연결 또는 파서와 같은 복잡한 상태 기반 시스템입니다.


0

직렬화는 이진 객체를 XML (또는 다른 문자열) 표현으로 변환하여 데이터베이스 / 파일에 저장하거나 웹 서비스 호출에서 네트워크를 통해 전송하는 것과 관련이 있습니다. 역 직렬화는 XML / 문자열을 다시 개체로 변환하는 역 프로세스입니다.


0

클래스 (청사진)에서 실제 객체 (사물)를 인스턴스화 (구성) 할 때 객체 (사물)를 메모리의 공간으로 직렬화 (기본 원자 구조로 분해)하여 저장해야합니다. (Star Treks Transporter와 같은 종류). 당신은 물건을 어딘가로 운반하고 저장할 수있는 정보 스트림으로 나눕니다. 그런 다음 사물을 재구성하려고 할 때 원자 적으로 저장된 인스턴스를 객체로 다시 가져옵니다. instaniation과 다릅니다.


0

직렬화는 객체를 이진 데이터 스트림으로 변환하여 파일에 저장하거나 네트워크를 통해 동일한 객체로 다시 복원 할 수 있도록하는 프로세스입니다.

문서는 Java 직렬화를 자세히 이해하는 데 도움이됩니다.


-1

직렬화는 객체의 상태를 파일에 저장할 수있는 형태 (예 :)로 객체 (메모리 덩어리)를 변환 한 경우입니다.

쿠키를 만드는 것으로 취급하십시오-물체는 반죽이고 쿠키는 일련 화 된 반죽입니다.

"직렬화"를하면 쿠키를 친구에게 보낼 수 있습니다.

그런 것 :-)


4
쿠키는 반죽으로 다시 되돌릴 수 없습니다 (직렬화되지 않음).
Dave Sherohman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.