Plain Old Java Object

Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. [1]

우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아 글쎄, 다들 좋아하더라고.
 
— 마틴 파울러

POJO라는 용어는 이후에 주로 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용되었다. 스프링 프레임워크는 POJO 방식의 프레임워크이다.

POJO 현상 편집

POJO라는 용어는 기존의 복잡한 프레임워크 대신 일반적이고 쉬운 용어가 필요한 다른 분야에도 널리 사용되기 시작했다.

  • POPO : Plain Old PHP Object의 약자로서, PHP 언어에서 사용
  • POCO : Plain Old CLR Object의 약자로서, 닷넷 프레임워크에서 사용
  • PODS : Plain Old Data Structures의 약자로서, C++ 언어에서 오직 C 언어의 특징만 사용하는 경우
  • POD : Plain Old Documentation의 약자로서, (Perl) 언어에서 사용
  • POTS : Plain Old Telephone Service의 약자

정의 편집

이상적으로, POJO는 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 오브젝트라고 할 수 있다. 이를테면 POJO는 다음과 같은 행동을 해서는 안된다.

  1. 미리 정의된 클래스의 확장. 예:
    public class Foo extends javax.servlet.http.HttpServlet { ...
    
  2. 미리 정의된 인터페이스의 구현. 예:
    public class Bar implements javax.ejb.EntityBean { ...
    
  3. 미리 정의된 애너테이션을 포함. 예:
    @javax.persistence.Entity public class Baz { ...
    

그러나 기술적 어려움이나 기타 이유로 인해 POJO 호환으로 기술하고 있는 수많은 소프트웨어 제품이나 프레임워크들은 실제로 정상 동작을 위해 퍼시스턴스(persistence)와 같은 기능을 위해 미리 정의된 애너테이션의 사용을 요구하고 있다.

각주 편집

  1. 파울러, 마틴. “POJO”. 2012년 6월 7일에 확인함.