public class Student {
private String name;
private Integer age;
public String getName() {
return this.name;
}
public Integer getAge() {
return this.age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
위의 예제처럼
- 필드와 Getter, Setter로만 이루어진 순수한 Value Object
- 특정 환경, 규약에 종속되지 않는다. 자바 언어 사양 외에 어떠한 제약도 없는 Java Object
- Servlet을 작성하는 경우
public class LoginServlet extends HttpServlet { ... }
- HttpServlet 클래스를 상속받음으로써 다른 클래스를 상속할 수 없다. (interface를 이용할 수 있긴 하겠지만, 결과적으로 객체지향 설계 원칙을 위반할 가능성이 높아진다.)
- HttpServlet 클래스를 알고 있지 않다면, 언뜻 코드를 봤을 때 직관적으로 코드를 이해하기 어렵다.
- 게다가, HttpServlet 클래스에서 어떤 기능을 제공하는지, 어떤 기능들을 사용하기 위해 상속받았는지, 어떤 코드들을 재사용할 수 있을 지 판단하기 어렵다.
- 웹 환경에서 요청 처리를 위해 HttpServletRequest, HttpSession 등 API를 직접적으로 사용하는 경우
- 다른 환경에서 사용하기 어렵다.
- 비즈니스 로직과 웹 관련 코드가 섞여 이해하기 어렵다.
- 웹 서버를 구동하여 어플리케이션을 올려야 테스트 가능해지므로 독립적인 테스트를 할 수 없다.
- Servlet을 작성하는 경우
- 단일 책임 원칙
세 가지 조건을 만족하는 객체라고 할 수 있다. 다시 말해, POJO
란 객체지향 설계 원칙을 지키며, 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용 가능한 객체를 말한다.