POJO

Jun 8, 2019


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;
  }
}

위의 예제처럼

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

세 가지 조건을 만족하는 객체라고 할 수 있다. 다시 말해, POJO란 객체지향 설계 원칙을 지키며, 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용 가능한 객체를 말한다.