Serialization (직렬화)

이진석·2022년 8월 24일
1
post-thumbnail

20220824

한 번에 끝내는 Java/Spring 웹 개발 마스터


1) Serialization (직렬화)란?

  • 인스턴스의 상태를 그대로 파일 저장하거나 네트웍으로 전송하고 (serialization) 이를 다시 복원(deserializatio) 하는 방식을 말한다.

  • 보조 스트림을 활용하여 직렬화를 제공한다.

  • ObjectInputStream과 ObjectOutputStream

  • 직렬화는 인스턴스의 내용이 외부로 유출되는 것이므로, 해당 객체에 대한 직렬화 의도를 표기해야 한다.


2) SerializationTest

package ch17;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class Person implements Serializable {
	
	String name;
	String job;
	
	public Person() {
		
	}
	
	public Person(String name, String job) {
		this.name = name;
		this.job = job;
	}
	
	public String toString() {
		return name + ", " + job;
	}
}

public class SerializationTest {
	
	public static void main(String[] args) {
	
		Person personlee = new Person("이진석", "개발자");
		Person personyong = new Person("용현정", "회사원");
		
		try (FileOutputStream fos = new FileOutputStream("serial.txt");
				ObjectOutputStream oos = new ObjectOutputStream(fos)) {
			
			oos.writeObject(personlee);
			oos.writeObject(personyong);
		} catch (IOException e) {
			
			System.out.println(e);
		}
		
		try (FileInputStream fos = new FileInputStream("serial.txt");
				ObjectInputStream ois = new ObjectInputStream(fos)) {
			
			Person pLee = (Person)ois.readObject();
			Person pYong = (Person)ois.readObject();
			
			System.out.println(pLee);
			System.out.println(pYong);
		} catch (IOException e) {
			
			System.out.println(e);
		} catch (ClassNotFoundException e) {
			
			System.out.println(e);
		}
	}
}

  • Person 클래스를 만들고 SerializationTest클래슬 통해서 직렬화를 해보았다.

  • 이름과 직업이라는 부분을 fileiputstream을 통해서 파일에 입력하고 직렬화를 하는 방식의 문제이다.

  • 중요한 점은 "해당 객체에 대한 직렬화 의도를 표기" 해야 하기 때문에, Pesron 클래스 뒤에 serializable을 implements해줌으로써 내가 이 클래스를 직렬화 하겠다는 의도를 보여줄 필요가 있다.

profile
혼자서 코딩 공부하는 전공생 초보 백엔드 개발자 / https://github.com/leejinseok0614

0개의 댓글