개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.04 22:19

Serializable::serialize 메서드 이해를 부탁드립니다.

목록
  • 오픈소스광신도 오래 전 2025.06.04 22:19 인기
  • 377
    1
Serializable 인터페이스의 serialize 메서드는 객체를 바이트 스트림으로 전환하는 기능을 제공합니다. 그러나 serialize 메서드를 사용하여 객체를 직렬화할 때, 어떤 경우에 객체의 속성이 생략되는지 궁금합니다.

예를 들어, serialize 메서드에서 객체의 속성이 private 이어도 생략되지 않는 이유는 무엇일까요?

또한, serialize 메서드에서 객체의 속성을 생략하는 방법은 없을까요?

제가 이해한 바에 따르면, serialize 메서드는 객체의 모든 속성을 직렬화하지만, 속성이 private 이면 생략되는 것 같습니다.

이러한 현상을 이해하기 위해 serialize 메서드를 사용하는 방법을 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  오래 전



    Serializable 인터페이스의 serialize 메서드는 객체의 모든 public, protected, default 접근 제어자 속성을 직렬화합니다. private 속성은 직렬화되지 않습니다. 그러나 private 속성을 직렬화하고 싶다면, getter 메서드를 생성하여 public으로 선언하면 private 속성이 직렬화됩니다.

    예를 들어, 다음 코드를 살펴보겠습니다.

    #hostingforum.kr
    java
    
    public class Person implements Serializable {
    
        private String name;
    
        private int age;
    
    
    
        public String getName() {
    
            return name;
    
        }
    
    
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
    
    
        public int getAge() {
    
            return age;
    
        }
    
    
    
        public void setAge(int age) {
    
            this.age = age;
    
        }
    
    }
    
    


    위 코드에서 Person 클래스는 Serializable 인터페이스를 구현하고 있습니다. private 속성인 name과 age는 직렬화되지 않습니다. 그러나 getter 메서드를 생성하여 public으로 선언하면 private 속성이 직렬화됩니다.

    #hostingforum.kr
    java
    
    public class Person implements Serializable {
    
        private String name;
    
        private int age;
    
    
    
        public String getName() {
    
            return name;
    
        }
    
    
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
    
    
        public int getAge() {
    
            return age;
    
        }
    
    
    
        public void setAge(int age) {
    
            this.age = age;
    
        }
    
    
    
        public static void main(String[] args) throws IOException, ClassNotFoundException {
    
            Person person = new Person();
    
            person.setName("John");
    
            person.setAge(30);
    
    
    
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
    
            ObjectOutputStream oos = new ObjectOutputStream(bos);
    
            oos.writeObject(person);
    
            oos.close();
    
    
    
            byte[] bytes = bos.toByteArray();
    
            ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
    
            ObjectInputStream ois = new ObjectInputStream(bis);
    
            Person deserializedPerson = (Person) ois.readObject();
    
            ois.close();
    
    
    
            System.out.println(deserializedPerson.getName()); // John
    
            System.out.println(deserializedPerson.getAge()); // 30
    
        }
    
    }
    
    


    위 코드에서 Person 클래스의 private 속성인 name과 age는 직렬화되고 deserializedPerson 객체를 통해 접근할 수 있습니다.

    2025-06-04 22:20

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 38,061건 / 68 페이지

검색

게시물 검색