캡슐화를 유지하면서 객체 내부 상태를 외부에 저장하는 방법이다. 객체 상태를 외부에 저장했다라 해당 상태로 다시 복구시킬 수 있다.
@Getter
public final class GameSave {
private final int blueTeamScore;
private final int redTeamScore;
public GameSave(int blueTeamScore, int redTeamScore) {
this.blueTeamScore = blueTeamScore;
this.redTeamScore = redTeamScore;
}
}
@Getter
@Setter
public class Game {
private int redTeamScore;
private int blueTeamScore;
public GameSave save() {
return new GameSave(this.blueTeamScore, this.redTeamScore);
}
public void restore(GameSave gameSave) {
this.blueTeamScore = gameSave.getBlueTeamScore();
this.redTeamScore = gameSave.getRedTeamScore();
}
}
public class Client {
public static void main(String[] args) {
Game game = new Game();
game.getBlueTeamScore(10);
game.getRedTeamScore(20);
GameSave save = game.save();
game.setBlueTeamScore(12);
game.setRedTeamScore(22);
game.restore(save);
}
}