Header

Spring - POJO(Plain Old Java Object)

Spring - POJO(Plain Old Java Object)






Plain Old Java Object란



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

스프링 프레임워크(Spring Framework)는 POJO 방식의 프레임워크입니다.


(POJO는 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말하는 것)

ORM 기술을 사용하고 싶었다면, ORM을 지원하는 ORM 프레임워크를 사용해야 합니다(대표적으로 Hibernate Framework). 만약 자바 객체가 ORM 기술을 사용하기 위해서 하이버네이트 프레임워크(Hibernate Framework)를 직접 의존한다면, 그것은 POJO라고 할 수 없습니다. 특정 '기술'에 종속되었기 때문입니다.



POJO를 지향하는 이유



예전에는 특정 기술과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수에 어려움이 생겼습니다.

이 말은 객체지향 언어를 대표하는 자바(Java)가 객체지향 설계의 장점들을 잃어버리게 된 것입니다.

그래서 POJO라는 개념이 등장했습니다. 본래 자바의 장점을 살리는 '오래된' 방식의 '순수한' 자바객체라는 뜻입니다.


POJO를 유지하면서 특정 기술을 사용할 경우



ORM이라는 기술을 사용하기 위해서 'JPA'라는 표준 인터페이스를 정해두었습니다. 그리고 이제 여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래, 구현되어 실행됩니다.
해당 방법으로 스프링이 새로운 엔터프라이즈 기술을 도입 하면서도 POJO를 유지할 수 있습니다.
하이버네이트는 Persistence 기술과 오브젝트-관계형 DB 매핑을 순수한 POJO를 이용해 사용할 수 있게 만드는 POJO기반의 퍼시스턴스 프레임워크입니다. JDBC API를 직접 사용해 개발하는 것 못지않은 성능과 복잡한 퍼시스턴스 로직을 개발 가능하게 해주었기 때문입니다. 그리고 하이버네이트가 사용하는 POJO 엔티티들은 객체지향적인 다양한 설계와 구현이 가능하다는 점입니다. 상속, 다형성, 밸류 오브젝트, 사용자 정의 타입 등을 기술적 손해 없이 매핑용 오브젝트로 사용할 수 있었습니다. 스프링은 엔터프라이즈 서비스들을 POJO 기반으로 만든 비즈니스 오브젝트에서 사용할 수 있게 해줍니다. (선언적인 트랜잭션과 보안 등등)

POJO 정의



POJO는 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 오브젝트라고 할 수 있습니다. 순수한 VO(Value Object) 클래스를 POJO 클래스로 볼 수 있습니다.

(참고사항) POJO는 다음과 같은 것들을 따라야 할 필요가 없습니다.

1. 미리 정의된 클래스의 확장

public class Foo extends javax.servlet.http.HttpServlet { ... }

2. 미리 정의된 인터페이스의 구현

public class Bar implements javax.ejb.EntityBean { ... }



댓글 쓰기

0 댓글