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는 다음과 같은 행동을 해서는 안된다.
- 미리 정의된 클래스의 확장. 예:
public class Foo extends javax.servlet.http.HttpServlet { ...
- 미리 정의된 인터페이스의 구현. 예:
public class Bar implements javax.ejb.EntityBean { ...
- 미리 정의된 애너테이션을 포함. 예:
@javax.persistence.Entity public class Baz { ...
그러나 기술적 어려움이나 기타 이유로 인해 POJO 호환으로 기술하고 있는 수많은 소프트웨어 제품이나 프레임워크들은 실제로 정상 동작을 위해 퍼시스턴스(persistence)와 같은 기능을 위해 미리 정의된 애너테이션의 사용을 요구하고 있다.