ObjectStream

sungs·2025년 8월 6일

자바

목록 보기
56/95

ObjectStream

객체를 직렬화하여 객체째로 파일이나 네트워크에 입출력할 수 있게 해준다.
객체 직렬화는 객체를 바이트 형태로 바꿔 스트림을 통해 입출력할 수 있게 만들어 주는 것을 말한다.

사용하려면 클래스에 Serializable 인터페이스를 구현해주어야 한다. 참고로 빈 인터페이스로 implements만 해주면 된다.

예제

import java.io.*;

public class WriteObject {
    public static void main(String[] args) {
        // 직렬화할 객체 (Serializable 인터페이스 구현 필요)
        MyObject obj = new MyObject("자바", 2025);

        try (FileOutputStream fos = new FileOutputStream("object.dat");
             ObjectOutputStream oos = new ObjectOutputStream(fos)) {

            // 객체를 파일에 쓴다
            oos.writeObject(obj);
            System.out.println("객체가 파일에 성공적으로 저장되었습니다.");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

// 반드시 Serializable 인터페이스를 구현해야 함
class MyObject implements Serializable {
    private String name;
    private int year;

    public MyObject(String name, int year) {
        this.name = name;
        this.year = year;
    }

    // getters (생략 가능)
    @Override
    public String toString() {
        return "이름: " + name + ", 년도: " + year;
    }
}

import java.io.*;

public class ReadObject {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("object.dat");
             ObjectInputStream ois = new ObjectInputStream(fis)) {

            // 파일에서 객체를 읽어온다
            MyObject obj = (MyObject) ois.readObject();
            System.out.println("파일에서 읽어온 객체: " + obj);

        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

다른 보조 스트림과 마찬가지로 각각 스트림에 연결시켜주면 된다.그런 다음 read/writeObject 입출력 해준다.

한 객체뿐만 아니라 리스트로 저장된 객체들을 한 번에 직렬화/역직렬화시켜 입출력할 수 있다.

단점

좋아 보이는 기능이지만 요즘에는 안 쓰이는 기능이다. 유연성이나 너무 무거운 등 여러 가지 문제점이 발생하기 때문이다. 따라서 요즘에는 복잡하고 무거운 xml을 거쳐 json을 데이터 보내거나 가져올 때의 포맷으로 많이 쓴다. json은 정말 간단하고 유연하게 사용할 수 있다.게다가 다른 언어와의 호환성도 좋다.여기서 더욱 성능을 좋게 만들고 싶으면 Protobuf, Avro 사용하면 된다.

profile
앱 개발 공부 중

0개의 댓글