호기심
110
2017-05-15 20:14:35
7
1531

직렬화를 좀 쉽게 설명해주실분 ㅠㅠ


직렬화가 언제언제 쓰이는지 잘 모르겠습니다.

부탁드리겠습니다...

0
  • 답변 7

  • zepinos
    21k
    2017-05-15 20:30:03

    쉽게 생각하세요.


    하나의 객체를 문자로 치환한 겁니다. 그럼 그걸 db 나 파일로 저장해놨다가 그대로 복구할 수 있겠죠. 단순히 값만 치환해서 저장한게 아니라서 원래 있던 객체 그대로 다른 머신에도 이동시킬 수 있습니다. 그래서 네트워크로 객체를 그대로 보내서 똑같은 객체를 만들어낼 수도 있겠죠.


  • OkkyUser
    3k
    2017-05-15 20:55:24

    serialise이잖아요. 우리 말로 하면 (그래도 한자입니다만) 순서대로 늘어 놓는다는 뜻인데, 메모리에 있는 복잡한 데이터 구조를 단순한 값의 나열로 바꿔서 쉽게 저장하거나 다른 데로 보낼 수 있게 하는 겁니다.

    예전 무슨 영국 도큐멘터리에서, 2차원인 그림 데이터를 필름처럼 픽셀이 쭉 늘어져 있는 모양으로 "serialise"해서 모뎀 선을 따라 먼 곳으로 전송하는 그래픽을 보여 줬던 기억이 있습니다.

  • 1212
    1k
    2017-05-15 21:49:29

    Object 내용을 디스크에 쓸일이 있을때 객체가 직렬화로 선언이 되어 있어야 합니다.

    왜냐면 직렬로 선언된 객체만 디스크에 쓸수있으니까요. 쉽죠?


  • 서비스지향개발자
    7k
    2017-05-15 21:55:44

    거미가 꽁댕이로 거미줄을 뽑을때 단백질이 직렬화 과정을 거쳐서 거미줄이 되는겁니다.

    단백질과 거미줄은 둘다 바이트인데

    거미 배속에 있을때는 단백질이고 꽁댕이로 나오면 거미줄인데

    직렬화란 무엇이냐.

    네. 바로 꽁댕이 입니다.

    그럼 . 안녕히 ..


    죄송합니다 윗분이 잘 설명해 주셨네요.;;

  • NPE
    1k
    2017-05-16 02:36:21 작성 2017-05-16 02:36:40 수정됨

    "객체를 바이트스트림으로 바꾼다"는 개념은 아실겁니다.


    이 바이트스트림은 메모리에 적재해서 사용할 수도 있고, 파일로 저장이 가능하죠.

    말 그대로 "객체" 자체를 하나의 데이터로 관리하는 방법입니다.


    대표적으로 쓰이는 게 객체의 "깊은 복사"할 때 아주 유용합니다.

    직렬화시키는 순간 별도의 메모리에 적재가 되는 객체가 생성되기 때문이죠.


    그리고 안드로이드에서도 각 액티비티간에 객체 자체를 주고 받을 때도 유용하고,

    많이 예로 드는 통신간에도 객체 자체를 문자열이나 파일로 바꿔서 전송할 때도 씁니다.


    또 예를 들 수 있는 게 게임 세이브 기능도 직렬화를 쓸 수 있겠네요.

    내 위치는 어디에 있었고, 아이템은 뭘 가지고 있었는 지 등등을 객체에 저장하고 파일로 만들어서 저장할 때 쓸 수 있겠네요.

  • 1212
    1k
    2017-05-16 03:00:16

    정 이해 안되시면 not Serializable ? 이런 에러 나올때 관련 객체에 implement Serializable 이던가 그거 걸어주면 됩니다. 몇가지 필요한 케이스가 있습니다. 평소엔 안해도 됩니다. 주로 공통 작업하는 사람이나 가끔 아주 가끔 쓸법해요.


    가령 한가지로

    RMI 로 객체를 1번 서버에서 2번 서버로 넘깁니다. 이때 객체에 File file 이 선언되어 있다면 Serializable 이 선언이 안되어 있다면 넘어가긴 넘어갑니다. 그런데 파일 정보(파일 경로, 파일 명 등)만 넘어가고 2번 서버에서 실제로 읽을라고 하면 파일이 안 읽힙니다. 이때, Serializable 로 선언하면 파일 정보도 넘어가고 파일도 실제로 읽을수 있게 됩니다.


    이런식으로 쓰이는 케이스가 몇가지 있어요.




  • 호기심
    110
    2017-05-16 10:23:12

    감사합니다~

  • 로그인을 하시면 답변을 등록할 수 있습니다.