"안녕하세요, 아미고! 오늘 우리는 또 다른 흥미로운 주제에 대해 배울 것입니다. 특히 객체 저장 및 로드 (재구성) . Cat 클래스가 있다고 가정합니다."
암호
class Cat
{
public String name;
public int age;
public int weight;
}
그리고 파일에 저장하고 불러오는 편리한 메커니즘을 추가하고 싶다고 가정해 보겠습니다.
다음과 같이 할 수 있습니다.
암호
class Cat {
public String name;
public int age;
public int weight;
public void save(PrintWriter writer) throws Exception {
writer.println(name);
writer.println(age);
writer.println(weight);
writer.flush();
}
public void load(BufferedReader reader) throws Exception {
name = reader.readLine();
age = Integer.parseInt(reader.readLine());
weight = Integer.parseInt(reader.readLine());
}
}
"와우! 정말 쉽네요! 각 인수의 값을 한 줄에 하나씩 쓰기만 하면 됩니다. 파일을 로드할 때 동일한 순서로 읽습니다. 완벽한 솔루션입니다."
"고맙습니다, Amigo. 이제 이 클래스 그룹에 대한 저장 및 로드 방법을 작성할 수 있습니다."
암호
class Cat
{
public String name;
public int age;
public int weight;
}
class Dog
{
public String name;
public int age;
}
class Human
{
public Cat cat;
public Dog dog;
}
개 한 마리와 고양이 한 마리를 가질 수 있는 Human 개체가 있습니다.
"해결책이 있습니다."
암호
class Cat {
public String name;
public int age;
public int weight;
public void save(PrintWriter writer) throws Exception {
writer.println(name);
writer.println(age);
writer.println(weight);
writer.flush();
}
public void load(BufferedReader reader) throws Exception {
name = reader.readLine();
age = Integer.parseInt(reader.readLine());
weight = Integer.parseInt(reader.readLine());
}
}
암호
class Dog {
public String name;
public int age;
public void save(PrintWriter writer) throws Exception {
writer.println(name);
writer.println(age);
writer.flush();
}
public void load(BufferedReader reader) throws Exception {
name = reader.readLine();
age = Integer.parseInt(reader.readLine());
}
}
암호
public class Human {
public Cat cat;
public Dog dog;
public void save(PrintWriter writer) throws Exception {
cat.save(writer);
dog.save(writer);
}
public void load(BufferedReader reader) throws Exception {
cat.load(reader);
dog.load(reader);
}
}
"아주 좋은 해결책이군요. 그런데 인간에게 개는 있는데 고양이가 없다면 어떻게 될까요?"
null 검사는 어디에 있습니까?
"지금 해결하겠습니다."
암호
public class Human {
public Cat cat;
public Dog dog;
public void save(PrintWriter writer) throws Exception {
if (cat != null)
cat.save(writer);
if (dog != null)
dog.save(writer);
}
public void load(BufferedReader reader) throws Exception {
cat = new Cat();
cat.load(reader);
dog = new Dog();
dog.load(reader);
}
}
"여전히 정확하지 않습니다. 두 가지 오류가 있습니다."
1) 사람에게 고양이나 개가 없을 수도 있지만 load 메서드가 호출되면 고양이나 개가 생성됩니다.
2) 개만 저장하면 로드될 때 고양이가 데이터를 읽습니다.
"그럼 어떻게 해야 할까요?"
" 변수 쓰기를 건너뛸 수 없습니다. 그렇지 않으면 읽는 동안 문제가 발생합니다 . 저장 작업 중에 null인 변수가 로드 작업 중에 null로 설정되었는지 확인해야 합니다. 내 버전은 다음과 같습니다."
암호
public class Human {
public Cat cat;
public Dog dog;
public void save(PrintWriter writer) throws Exception {
String isCatPresent = cat != null ? "yes" : "no";
writer.println(isCatPresent);
writer.flush();
if (cat != null)
cat.save(writer);
String isDogPresent = dog != null ? "yes" : "no";
writer.println(isDogPresent);
writer.flush();
if (dog != null)
dog.save(writer);
}
public void load(BufferedReader reader) throws Exception {
String isCatPresent = reader.readLine();
if (isCatPresent.equals("yes")) {
cat = new Cat();
cat.load(reader);
}
String isDogPresent = reader.readLine();
if (isDogPresent.equals("yes")) {
dog = new Dog();
dog.load(reader);
}
}
}
"예, 이 솔루션이 마음에 듭니다."
"네, 좋네요."