자바에서 객체 직렬화 (Serialization)는 메모리에 있는 객체 인스턴스를 바이트 스트림으로 변환하여 파일에 저장하거나 네트워크를 통해 전송할 수 있는 기능이다
반대로 역직렬화 (Deserialization) 은 바이트 스트림을 다시 객체화 시키는 작업을 의미한다.
근데 요새는 XML, JSON , 데이터 베이스 쓰니까 잘 안쓰긴함ㅋㅋ
그래도 XML, JSON , 데이터 베이스 같은 저장 방식의 조상님격이라 한번 알아봤다!
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* Object 스트림은 컬렉션을 통으로 쓰고 통으로 읽는다
* writeObject() , readObject()
*/
public class ObjectMemberRepository implements MemberRepository {
private static final String FILE_PATH = "temp/members-obj.dat";
@Override
public void add(Member member) {
List<Member> members = findALl();
members.add(member);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_PATH))) {
oos.writeObject(members); // 멤버 객체 개별로 저장할 수 없다. 무조건 하나의 파일 통으로 저장해야 한다
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public List<Member> findALl() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_PATH))) {
Object findObject = ois.readObject();
return (List<Member>) findObject;
} catch (FileNotFoundException e) {
return new ArrayList<>(); // 최초에는 데이터가 없기 때문에 빈 배열을 반환해주면 앞으로 새로 데이터를 쓰는데 유용하게 사용
} catch (IOException | ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
}
'Java > Java' 카테고리의 다른 글
[Java] 까먹지 말아야 할 Java 메모리 구조 (1) | 2025.03.04 |
---|---|
[Java] 채팅 프로그램 소켓 연결 구현 1 - 1 대 1 통신을 해보자 (0) | 2025.02.09 |
[Java] 예외처리 - 부모 자식 관계 (1) | 2025.01.02 |
[Java] 제네릭 (Generic) (2) (1) | 2024.10.10 |
[Java] 제네릭이 필요한 이유 (Generic) (1) (0) | 2024.10.07 |