728x90
POJO
Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다.
- 위키백과
오래된 방식의 간단한 오브젝트란?
- 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 의미
- 예를 들어 특정 기술을 사용할 때 특정 프레임워크만 그 기술을 지원하여,
특정 프레임워크에 직접 의존해야 하는 순간 POJO라고 할 수 없음.
특정 기술(프레임워크)에 종속되었기 때문!
POJO를 지향해야하는 이유
- 특정 기술과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수에 어려움이 생김
- 특정 기술의 클래스를 상속받거나, 직접 의존하게 되어 확장성이 매우 떨어지는 단점
- 즉, 객체지향 언어인 JAVA가 객체지향 설계의 장점들을 잃어버리는 것을 의미
POJO가 아닌 경우
- 이상적으로, POJO는 Java 언어 규약에 의해 강제된 것 이외의 제한에 구속되지 않는 Java 오브젝트
미리 지정된 클래스를 extends 하는 것
public class Foo extends javax.servlet.http.HttpServlet { ... }
미리 정의된 인터페이스를 implement 하는 것.
public class Bar implements javax.ejb.EntityBean { ... }
미리 정의된 Annotation을 포함하는 것.
@javax.persistence.Entity public class Baz { ... }
현재의 POJO
- 기술적 어려움과 다른 이유로 인해, POJO-compliant라고 기술된 많은 소프트웨어 제품이나 프레임워크들(persistence와 같은)은 실제로 미리 정의된 Annotation을 제대로 동작하는 기능을 구현하기 위해 필요로 함
- Annotation을 제거했을 때, POJO 상태로 되돌아간다면 POJO로 간주할 수 있다는 것
특정 기술을 사용하는 방법 - PSA
- 스프링 개발자들은 ORM이라는 기술을 사용하기 위해서 'JPA'라는 표준 인터페이스를 정함
- 여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래, 구현되어 실행
- 이것이 스프링이 새로운 엔터프라이즈 기술을 도입 하면서도 POJO를 유지하는 방법
- 이러한 방법을 스프링의 PSA 라고 함
진정한 POJO란?
그럼 특정 기술규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가? 많은 개발자가 크게 오해하는 것 중의 하나가 바로 이것이다. ...(중략)... 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
- 토비의 스프링
출처
728x90
'개발 지식 > JAVA 기본 지식' 카테고리의 다른 글
JavaBeans (0) | 2022.01.25 |
---|---|
OOP(Object Oriented Programming 객체 프로그래밍) 정리 (0) | 2022.01.24 |
클래스 로더 (Class Loader) (0) | 2022.01.22 |
매번 까먹는 JVM 정리 (0) | 2022.01.22 |