
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