2016년 2월 11일 목요일

[JAVA 교육] 객체 직렬화(Object Serialization)

[JAVA 교육] 객체 직렬화(object serialization)


(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.)

1. Object Serialization

1. 개념
  1. App data Object 멤버변수를 이용해서 관리하고 저장하거나 전송하는 .
    1. 저장하고 싶을 객체 자체를 그대로 저장한다.
    2. 객체가 아닌 단순 text 저장할 때의 단점
      1. 구분자를 넣어야 한다.
      2. 파싱 해야한다.(파싱 : 구분자를 기준으로 문자열을 쪼개고 위치의 문자가 어떤 의미인지 파악하는 과정)
    3. 객체를 저장
      1. 단점 : 다시 읽을 어떤 객체인지 확인하기 위해서   클래스가 필요하다.
      2. 장점 : 개발자가 저장을 위해 일이 적다.
2. 종류
  1. 자바의 직렬화 : Sun(, Oracle)에서 만든
    1. 자바의 직렬화를 위해 사용되는 클래스
      1. ObjectInputStream
      2. ObjectOutputStream
  2. ProtoBuf(Protocol Buffers)
    1. 구글에서 만든
    2. 서로 다른 언어간 데이터 전송을 위한 프로토콜
    3. 이기종 플랫폼 간에 구조화 데이터를 쉽게 주고 받을 있도록 하는
  3. AVRO
    1. Apache 재단에서 만든
    2. 주로 빅데이터를 직렬화하는 용도
3. 자바에서의 구현
  1. implements Serialization : Serialization 인터페이스를 구현한다.
    1. Serialization 인터페이스는 marker 인터페이스이다.
  2. 직렬화 클래스
    1. ObjectInputStream
      1. readObject() : 읽어 들일 반드시 형변환을 해줘야한다.(Object 형으로 return되기 때문이다.)
    2. ObjectOutputStream
      1. writeObject()
  3. serialVersionUID 입력해 주어야 한다.
    1. 클래스의 구조가 변경되더라도 serialVersionUID 같으면 동일 클래스임을 보장한다.
  4. transient라는 속성이 있다.
    1. 변수에 선언하는 제한자이다.
    2. transient 선언된 변수는 직렬화에서 제외된다.(직렬화 없거나 하고 싶지 않은 변수에 선언한다.)
    3. transient 반드시 붙여야 하는 경우가 있다.
      1. 예로, thread 직렬화 되지 못하도록 짜여져 있다.
      2. thread 사용되는 변수는 직렬화 제외해야 한다.

댓글 없음:

댓글 쓰기