JAVA/Spring Framework

Spring 핵심개념! POJO란?

_DoYun 2022. 6. 18. 10:58

# POJO(Plain Old Java Object)란?

 

POJO에서 'JO'는 Java를 배울 때 흔히들 언급하는 객체지향 프로그래밍을 의미합니다. 'PO'는 플레인 요거트를 연상하시면 이해하기 수월합니다. 플레인 요거트는 토핑과 소스가 전혀없는 순수한 요거트를 의미합니다. 즉, 여기서는 Java로 생성하는 순수한 객체를 말합니다. 

 

이러한 장황한 설명을 떠나서 쉽게 POJO를 정의해보면, 다른 클래스나 인터페이스를 상속 받아 메서드가 추가된 객체가 아닌 getter, setter 같이 기본적인 기능만 가진 자바 객체를 말하기도 합니다.

 

public class Student {
    private int grade;
    private String name;
    
    public int getGrade() {
    	return grade;
    }
    public String getName() {
    	return name;
    }
   
    
    public void setGrade(int grade) {
    	this.grade = grade;
    }
    public void setName(String name) {
    	this.name = name;
    }
 
}

위 코드처럼 순수하게 Getter, Setter로만 만들어진 클래스를 우린 POJO라 부르기도 합니다.

 

# POJO 성립 조건

1. 특정 기술이나 규약에 종속되지 않아야 합니다.

public class Practice extends javax.servlet.http.HttpServlet { ...
public class Practice implements javax.ejb.EntityBean { ...

위 코드들과 같이 클래스 확장이나 인터페이스 구현처럼 순수한 자바 객체가 아닌 경우 POJO라고 할 수 없습니다.

 

위처럼 특정 기술을 상속 해서 코드를 작성하게 되면 나중에 애플리케이션의 요구사항이 변경되서 다른 기술로 변경하려면 명시적으로 사용했던 부분을 전부 다 일일이 제거하거나 수정해야합니다.

 

 

2. 특정 환경에 종속되지 않아야 합니다.

서블릿(Servlet) 기반의 웹 애플리케이션을 실행 시키는 서블릿 컨테이너(Servlet Container)인 아파치 톰캣(Apache Tomcat)을 예로 들어보겠습니다.

 

순수 Java로 작성한 애플리케이션 코드내에서 Tomcat이 지원하는 API를 직접 가져다가 사용한다고 가정을 해봅시다.

 

그런데 만약에 시스템의 요구 사항이 변경되어서 Tomcat말고 제티(Zetty)라는 다른 Servlet Container를 사용하게 된다면 어떻게 될까요?

 

애플리케이션 코드에서 사용하고 있는 Tomcat API 코드들을 모두 걷어내고 Zetty로 수정하든가 최악의 경우에는 애프리케이션을 전부 뜯어 고쳐야될지도 모르는 상황에 직면하게 될 수 있습니다.

 

 

*마지막으로 POJO를 사용하는 가장 큰 이유는 객체지향적인 설계를 제한없이 적용할 수 있다는 점입니다.