Java POJO 클래스

JavaBeginner
지금 연습하기

소개

이 랩에서는 POJO(Plain Old Java Objects, 일반적인 자바 객체) 와 그 규칙에 대해 배우게 됩니다. 또한 Java Bean 클래스에 대해서도 배우게 됩니다. 이 랩을 마치면 다음을 수행할 수 있습니다.

POJO 클래스 생성

이 단계에서는 Sample이라는 POJO 클래스를 생성합니다. POJO 클래스는 어떤 방식으로든 생성될 수 있으며, 어떤 규칙도 따를 필요가 없습니다.

// Sample POJO class
public class Sample{
    public String field1;
    private int field2;
    double field3;

    Sample(String s, int i, double d){
        this.field1 = s;
        this.field2 = i;
        this.field3 = d;
    }

    public String getField1(){
        return field1;
    }

    public double getField3(){
        return field3;
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 컴파일합니다.

cd ~/project
javac Sample.java

POJO 클래스 이해

이 단계에서는 Sample 클래스를 실행하고 작동 방식을 확인합니다.

public class Main{
    public static void main(String[] args) {
        Sample sample = new Sample("field 1", 100, 123.45);

        System.out.println("Field 1: " + sample.field1);
        System.out.println("Field 2: " + sample.field2);
        System.out.println("Field 3: " + sample.field3);
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 실행합니다.

java Main

Reflection API 이해

이 단계에서는 Reflection API 를 사용하여 Sample 클래스의 속성을 확인합니다. Reflection API 는 애플리케이션의 동작을 검사하고 수정할 수 있는 강력한 도구입니다.

import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws Exception {
        Sample s = new Sample("f1", 0, 0.0);
        try {
            Map<String, Object> properties = BeanUtils.describe(s);
            for (Map.Entry<String, Object> e : properties.entrySet())
                System.out.println(e.getKey() + "->" + e.getValue());
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 컴파일합니다.

cd ~/project
javac -cp .:commons-beanutils-1.9.4.jar Main.java

-cp 플래그는 여기에서 클래스패스 (classpath) 를 지정하는 데 사용됩니다. :commons-beanutils-1.9.4.jarcommons-beanutils 패키지의 경로입니다. 컴파일된 파일을 실행하려면 다음 명령을 사용합니다.

java -cp .:commons-beanutils-1.9.4.jar Main

Java Bean 클래스 생성

이 단계에서는 Sample POJO 클래스를 Java Bean 클래스로 변환합니다. Java Bean 클래스는 몇 가지 규칙과 관례를 따르는 POJO 입니다.

import java.io.Serializable;

public class Sample implements Serializable{
    private String field1;
    private int field2;
    private double field3;

    public Sample(){}

    public Sample(String s, int i, double d){
        this.field1 = s;
        this.field2 = i;
        this.field3 = d;
    }

    public String getField1(){
        return field1;
    }

    public void setField1(String field1){
        this.field1 = field1;
    }

    public int getField2(){
        return field2;
    }

    public void setField2(int field2){
        this.field2 = field2;
    }

    public double getField3(){
        return field3;
    }

    public void setField3(double field3){
        this.field3 = field3;
    }
}

Java Bean 클래스 이해

이 단계에서는 Sample 클래스를 실행하고 작동 방식을 확인합니다.

public class Main{
    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.setField1("field 1");
        sample.setField2(100);
        sample.setField3(123.45);

        System.out.println("Field 1: " + sample.getField1());
        System.out.println("Field 2: " + sample.getField2());
        System.out.println("Field 3: " + sample.getField3());
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 컴파일합니다.

cd ~/project
javac Main.java

Reflection API 이해

이 단계에서는 다시 Reflection API 를 사용하여 Sample 클래스의 속성을 확인합니다.

public class Main {
    public static void main(String[] args) throws Exception {
        Sample s = new Sample("f1", 0, 0.0);
        try {
            Map<String, Object> properties = BeanUtils.describe(s);
            for (Map.Entry<String, Object> e : properties.entrySet())
                System.out.println(e.getKey() + "->" + e.getValue());
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 컴파일합니다.

cd ~/project
javac -cp .:commons-beanutils-1.9.4.jar Main.java

-cp 플래그는 여기에서 클래스패스 (classpath) 를 지정하는 데 사용됩니다. :commons-beanutils-1.9.4.jarcommons-beanutils 패키지의 경로입니다. 컴파일된 파일을 실행하려면 다음 명령을 사용하십시오.

java -cp .:commons-beanutils-1.9.4.jar Main

Java Bean 클래스 직렬화 이해

이 단계에서는 직렬화 (serialization) 를 사용하여 Sample 클래스의 객체를 파일에 저장합니다. 직렬화는 객체를 바이트 스트림으로 변환하는 데 사용되며, 이 바이트 스트림은 디스크에 저장하거나 네트워크를 통해 전송할 수 있습니다.

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        Sample s = new Sample("f1", 0, 0.0);
        try {
            FileOutputStream fos = new FileOutputStream("sample.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(s);
            oos.close();
            fos.close();
            System.out.println("Object has been serialized");
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 컴파일합니다.

cd ~/project
javac Main.java

다음 명령을 사용하여 컴파일된 파일을 실행합니다.

java Main

Java Bean 클래스 역직렬화 이해

이 단계에서는 역직렬화 (deserialization) 를 사용하여 파일에서 Sample 클래스의 객체를 읽습니다. 역직렬화는 바이트 스트림을 다시 객체로 변환하는 데 사용됩니다.

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class Main {
    public static void main(String[] args) throws Exception {
        try {
            FileInputStream fis = new FileInputStream("sample.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Sample s = (Sample) ois.readObject();
            ois.close();
            fis.close();
            System.out.println("Object has been deserialized");
            System.out.println("Field 1: " + s.getField1());
            System.out.println("Field 2: " + s.getField2());
            System.out.println("Field 3: " + s.getField3());
        } catch (Exception e) {
            System.out.print(e);
        }
    }
}

파일을 저장하고 다음 명령을 사용하여 터미널에서 컴파일합니다.

cd ~/project
javac Main.java

다음 명령을 사용하여 컴파일된 파일을 실행합니다.

java Main

요약

이 랩에서는 POJO(Plain Old Java Objects) 와 Java 프로그래밍에서의 역할에 대해 배웠습니다. POJO 클래스를 생성하는 방법과 POJO 와 Java Bean 클래스의 차이점을 배웠습니다. POJO 클래스를 Java Bean 클래스로 변환하는 방법과 Reflection API 를 사용하여 Java Bean 클래스의 속성을 확인하는 방법을 배웠습니다. 마지막으로, Java Bean 객체를 직렬화 (serialize) 하고 역직렬화 (deserialize) 하는 방법을 배웠습니다.