JavaEE등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크데 종속된 '무거운'객체를 만들게 된것에 반발해서 사용되게 된 용어(위키백과)
등장배경 : 특정 '기술'과 환경에 종속되어 의존하게 된 자바코드는 가독성↓ , 유지보수↓, 확장성↓ 이로인해 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게되어 POJO개념이 등장 ▶특정 기술에 종속되지 않는 순서한 자바 객체 특정 프레임워크를 의존하게 되다면 POJO라고 할 수 없음
예시1)
public class UserDTO {
private String userName;
private String userId;
private String userPassword;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPassword() {
return userPassword;
}
public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
}
}
위 객체는 기본적인 자바 기능인 Getter, Setter로 구성된 순수한 형태의 기본 클래스 (EJB 등에서 사용되는 JavaBean이 아닌) **EJB(Enterprise JavaBeans) : 자바 개발에 있어 로우 개발에 신경x 어플리케이션을 쉽게 만들어준 기술 객체 지향성을 감소시킴 ▶ 특정 기술에 종속되어 있지 않은 순수 자바 객체임 ▶ POJO라고 할 수 있음
예시2)
public class WinExam extends WindowAdapter {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
위 객체는 Window의 기능을 사용하기 위해 WindowAdapter클래스를 상속받음 ▶ 다른 솔루션을 사용하고자 할때 많은 코드를 리팩토링해야하는 문제 발생 ▶ POJO라고 할 수 없음
2. POJO를 유지하면서 특정 기술을 사용 할 경우
2-1. Hibernate(하이버네이트)
스프링 개발에서 많이 사용하고 있는 기술
특정기술에 종속적이면 POJO가 아닌데 스프링에서는 가능한 이유 ▶ 스프링에서 정한 표준 인터페이스가 있기 때문에
스프링 개발자들은 ORM(Object Relationship Mapping)이라는 기술을 사용하기 위해 'JPA'라는 표준 인터페이스를 정해둠 여러 ORM프레임워크들은 JPA라는 표준 인터페이스 아래 구현되어 실행됨 ▶ 스프링이 새로운 Enterprise 기술을 도입하면서도 POJO를 유지하는 방법 ( = 스프링의 PSA)