2022년 04월 28일 TIL
✅ 한 것
공부
- 1일 1커밋 & 푸쉬
- TIL 작성
- 프로그래머의 길 멘토에게 묻다 10p 독서
운동
- 악력기 100번
- 런지 100개
- 아침 출근 후 빌딩 15층 걸어 올라가기
- 점심먹고 빌딩 15층 걸어 올라가기
❓ 오늘의 질문, 배운 것
마샬링과 직렬화의 차이는?
- 직렬화(Serialization)
예를 들어서 Java에는 여러가지의 자료형이 있다. 그 중에서 레퍼런스를 가지고 있는 것들이 있다.
만약 이 객체 정보를 다른곳에서 그대로 쓰고 싶으면 어떻게 해야할까? 당연히 '주소'를 그대로 보내는것은 아무 의미가 없을 것이다.
여기서는 0x0033AA12 가 A객체를 의미하지만, 다른 곳으로 넘어가면 아무 의미가 없는 주소일건 자명하다.
이 주소값을 쭉쭉 타고 넘어가서 실제로 의미하는 값을 다 끌어오고, Primitive 한 데이터로 전부 변조하는 작업(byte stream으로 바꾸는 작업)을 바로 직렬화라고 한다. 그렇기 때문에 어떠한 객체 정보를 파일로 따로 저장을 하거나, 네트워크 상에서 주고받을 때 용이하게 한다. - 마샬링(Marshalling)
마샬링은 직렬화랑 비슷한 개념이다. 직렬화와 다른 점이라면 직렬화는 'byte stream으로 변환'을 하는 것이지만,
마샬링은 '변환하는 일련의 과정'을 뜻한다. 그러므로 마샬링이 좀 더 큰 개념이다.
직렬화의 과정에 마샬링이 포함이 되며, 실제로 객체 전송은 아래와 같은 순서로 진행된다.
그래서 직렬화를 마샬링이라고 해도 무방하다.
1. 직렬화된 객체를 바이트 단위로 분해한다. (marshalling)
2. 직렬화 되어 분해된 데이터를 순서에 따라 전송한다.
3. 전송 받은 데이터를 원래대로 복구한다. (unmarshalling)
직렬화와의 가장 큰 차이점은 직렬화는 객체가 대상이지만 마샬링은 변환자체에 목적이 있기 때문에,
대상과 변환할 오브젝트가 한정되지 않는다. 그렇기 때문에 서로 다른 언어간의 데이터 전송은 직렬화라고 하지 않고
마샬링이라고 한다.
📣 피드백
하루 반성 및 칭찬
- '오늘의 질문, 배운 것' 에 적은 내용은 한번 적고 끝나는게 아니라 자주 읽어봐야 함
- 궁금한 내용을 개념을 찾고 타이핑하면서 읽고, 하루를 마무리 할 때도 다시 읽어서 개념을 내것으로 만들기
- 퇴근 후에 모조건 TIL 한번 이상 보기
반응형