ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Serializable 이란?
    Language/Java 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
    반응형

    'Language > Java' 카테고리의 다른 글

    [Java] 리플렉션 (reflection) 에 대해 알아보자!  (0) 2025.04.23

    댓글

Designed by Tistory.