본문
[2017.09.22] 14. 왜 Serializable를 사용할까?
컴퓨터/질문: 개발 2017. 9. 22. 01:47
개념
Serializable의 목적은 Object를 byte array로 변경하기 위함이다.
그렇다면 왜 Object를 byte array로 변경해야할까?
(출처 - https://stackoverflow.com/questions/2232759/what-is-the-purpose-of-serialization-in-java)
byte array는 클래스의 상태를 나타내고 스트림을 통해 전달이 가능하기 때문이다.
예를 들면, 원본 Object 파일로 저장할 수 없지만 byte array로 변경한 Object는 파일로 저장이 가능하다.
그래서 Object->Byte array->File 저장이 가능하다.
실습
1. Serializable 사용 X, Object 저장 시도
- Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class Person { private String name; private String phoneNum; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } @Override public String toString() { return "Name: " + name + ", Phone Number: " + phoneNum; } } | cs |
- Serialize.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Serialize { public static void main(String[] args) { Person heepie = new Person(); heepie.setName("Heepie"); heepie.setPhoneNum("010-0000-0000"); try { FileOutputStream fileOut = new FileOutputStream("tmp/person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(heepie); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in /person.ser"); }catch(IOException i) { i.printStackTrace(); } } } | cs |
※ 참고: *.ser 파일은 Object를 File로 serializable할 때, 자바의 표준 규칙으로 확장자를 .ser로 하고 있다.
1. 결과
2. Serializable 사용 O, Object 저장 시도
- Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Person implements Serializable { private String name; private String phoneNum; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } @Override public String toString() { return "Name: " + name + ", Phone Number: " + phoneNum; } } | cs |
- Serialize.java
위 코드와 동일
2. 결과
3. 저장된 File 읽어오기
- Deserialize.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Deserialize { public static void main(String[] args) { Person p = null; try { FileInputStream fileIn = new FileInputStream("tmp/person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); p = (Person) in.readObject(); in.close(); fileIn.close(); }catch(IOException i) { i.printStackTrace(); return; }catch(ClassNotFoundException c) { System.out.println("Person class not found"); c.printStackTrace(); return; } System.out.println(p.toString()); } } | cs |
3. 결과
#serializable #자바 serializable #자바 직렬화 #자바 객체 전달 #자바 객체 전송 #직렬화 이유
'컴퓨터 > 질문: 개발' 카테고리의 다른 글
[2017.09.15] 01. 왜 Adapter를 사용할까? (0) | 2017.09.28 |
---|---|
[2017.09.23] 01. 왜 ORM을 사용할까? (0) | 2017.09.23 |
[2017.08.29] 13. 왜 제네릭을 사용할까? (0) | 2017.08.29 |
[2017.08.21] 12. 왜 Enum을 사용할까? (0) | 2017.08.21 |
[2017.08.21] 11. 런타임(Runtime)과 컴파일(Compile)이란? (0) | 2017.08.21 |
댓글