Plain Old Java Object의 약자로 특정 기술에 종속되지 않는 순수한 자바 객체를 의미한다.
public class User {
private String userName;
private String id;
private String password;
public User(String userName, String id, String password){
this.userName = userName;
this.id = id;
this.password = password;
}
public String getUserName() {
return userName;
}
public String getId() {
return id;
}
public String getPassword() {
return password;
}
}
// POJO가 아닌 경우
public class A extends B{ ... }
public class A implments B { ... }
웹 환경에 종속되는 HttpServletRequest나 HttpSession와 관련된 API를 직접 이용해서는 안된다.
책임과 역할이 다른 코드를 하나의 클래스에 넣는 경우 객체지향 원칙에서 멀어지기에 진정한
POJO라고 할 수 없다. 결국 POJO에는 객체지향의 원리가 담겨 있어야 한다.
특정 환경이나 기술에 종속적이지 않으면 재사용 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔해진다.
코드가 깔끔해져 상대적으로 디버깅하기 쉽다.
특정 기술이나 환경에 종속적이지 않아 테스트가 단순해진다.
객체지향적인 설계를 제한없이 적용할 수 있다.
스프링의 핵심 기술인 IoC/DI, AOP, PSA를 이용하여 POJO를 지향할 수 있다.
POJO의 정의로만 보면 사실 아닌게 맞다고 한다.
하지만 특정 프레임워크에 종속적인 Annotation을 제거했을 때 POJO가 된다면 POJO로 간주할 수 있다고 한다.