Serialization이란 객체를 저장하거나 네트워크로 전송할 수 있는 포맷으로 변환하는 과정입니다. 직렬화를 통해 객체의 상태를 기록할 수 있으며, 나중에 역직렬화하여 객체를 복원할 수 있습니다. 일반적으로 자바 객체를 JSON이나 XML과 같은 포맷으로 변환하는 데 사용됩니다.
import java.io.Serializable;
class Employee implements Serializable {
private String name;
private int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + ", " + age;
}
}
값에 의한 호출은 값을 복사해서 새로운 함수로 넘기는 방식입니다. 이 방식에서는 원본 값이 변경되지 않습니다. 즉, 메서드 내에서 값을 변경하더라도 호출자의 변수에는 영향이 없습니다.
public void modify(int x) {
x = 10;
}
int a = 5;
modify(a);
System.out.println(a); // 결과: 5
참조에 의한 호출은 주소 값을 인자로 전달하는 방식입니다. 이 방식에서는 원본 값을 직접 수정할 수 있기 때문에, 메서드 내에서 변경된 값이 호출자에게도 반영됩니다.
public void modify(int[] arr) {
arr[0] = 10;
}
int[] array = {5};
modify(array);
System.out.println(array[0]); // 결과: 10
Serialization은 객체를 영속성(Persistence)을 가지게 하거나 네트워크를 통해 전송할 때 필수적인 작업입니다. 객체의 상태를 직렬화하여 저장하거나 다른 환경으로 전송한 후, 다시 그 상태를 복원하는 과정에서 중요한 역할을 합니다.
자바는 Call by Value 방식을 사용하지만, 객체의 경우에는 참조 값을 전달하므로 마치 Call by Reference처럼 작동합니다. 기본 자료형은 값이 복사되어 전달되고, 참조형 변수는 객체의 참조 주소가 전달됩니다.