Language/Java
[Java] Serializable 이란?
hoonylab
2025. 4. 23. 17:50
728x90
반응형
✅ 자바에서 Serializable을 사용하는 이유
1. 객체를 저장하거나 전송할 수 있게 하기 위해
Serializable을 구현하면 자바 객체를 바이트 형태로 변환할 수 있어 다음과 같은 작업이 가능합니다:
- 파일에 저장
- 네트워크를 통해 전송
- 메모리에 저장하여 캐싱
2. 특정 상황에서 필요
- RMI(Remote Method Invocation)
- HTTP 세션 저장
- 객체 복사 시
✅ Serializable의 장점
- 간단한 구현 (
implements Serializable
) - 자바 표준 직렬화 도구 제공
- 재사용성 향상
✅ 사용 시 주의사항
serialVersionUID
명시 권장- 모든 필드는 직렬화 가능한 타입이어야 함
✅ 예제 코드
// Person.java
import java.io.Serializable;
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + " (" + age + "세)";
}
}
// Main.java
import java.io.*;
public class Main {
public static void main(String[] args) {
Person p = new Person("홍길동", 30);
// 직렬화: 객체를 파일에 저장
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
oos.writeObject(p);
System.out.println("객체 저장 완료");
} catch (IOException e) {
e.printStackTrace();
}
// 역직렬화: 파일에서 객체를 읽어오기
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
Person read = (Person) ois.readObject();
System.out.println("읽은 객체: " + read);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
이 코드는 Person
객체를 파일에 저장한 뒤 다시 읽어오는 직렬화/역직렬화 예시입니다.
728x90
반응형