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일에 확인함.