Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다.
POJO란 특정 기술에 종속되지 않는 순수한 자바 객체를 의미한다.
특정 기술을 사용하기 위해 특정 프레임워크를 의존하게되면 그것은 POJO라고 할 수 없다. 특정 기술에 종속 되어있기 때문
예)
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 기능만 가지고 있다.
특정 기술에 종속되어 있지 않은 순수 자바 객체이기 때문에 위 객체는 POJO라고 할 수 있다.
반대예)
public class WinExam extends WindowAdapter { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }
이처럼 Window의 기능을 사용하기 위해 WindowAdapter 클래스를 상속받을 것을 볼 수 있다.
이렇게 되면 다른 솔루션을 사용하고자 할 때 많은 양의 코드를 리팩토링 해야하는 문제가 있다.
이처럼 특정 기술과 환경에 종속되어 의존하게 된면, 코드 가독성 뿐만아니라 유지보수, 확장성에도 어려움이 생긴다.
이러한 객체지향의 장점을 잃어버린 자바를 되살리기 위해 POJO라는 개념이 등장한 것이다.