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
반응형