늦은 프로그래밍 이야기
POJO 본문
POJO (Plain Old Java Object)
Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. [1]
우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아 글쎄, 다들 좋아하더라고. - 마틴 파울러POJO라는 용어는 이후에 주로 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용되었다. 스프링 프레임워크는 POJO 방식의 프레임워크이다.
오래된 방식의 간단한 오브젝트란 특정 ‘기술’에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말하는 것이다.
예를들어, ORM(Object Relationship Mapping)이 새롭게 등장했을 때, ORM 기술을 사용하고 싶었다면 ORM을 지원하는 ORM 프레임워크를 사용해야 한다. (대표적으로 Hibernate) 만약 자바 객체가 ORM 기술을 사용하기 위해서 Hibernate 프레임워크를 직접 의존하는 순간 POJO라고 할 수 없다. 특정 ‘기술’에 종속되었기 때문이다.
POJO를 지향하는 이유
스프링 프레임워크 이전에는 원하는 엔터프라이즈 기술이 있다면 그 기술을 직접적으로 사용하는 객체를 설계했다. 그리고 이러한 개발 방식이 만연하고 있었다. 특정 기술과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수에 어려움이 생겼다. 또한, 특정 기술의 클래스를 상속받거나, 직접 의존하게 되어 확장성이 매우 떨어지는 단점이 있었다. 이말은 객체지향의 자바가 객체지향 설계의 장점을 잃어버리게 된 것이다.
그래서 본래 자바의 장점을 살리는 ‘오래된’ 방식의 ‘순수한’ 자바객체 POJO라는 개념이 등장했다.
특정 기술을 사용하고 싶다면? (스프링이 POJO를 유지하면서 Hibernate를 사용할 수 있는 이유) - PSA(Portable Service Abstraction)
Hibernate는 스프링 개발에서 많이 사용하고 있는 기술이다. 특정 기술에 종속적이면 POJO가 아니라면서 스프링에서는 가능한 이유는 바로 스프링에서 정한 표준 인터페이스가 있기 때문이다. 스프링 개발자들은 ORM이라는 기술을 사용하기 위해서 JPA라는 표준 인터페이스를 정해두었다. 그리고 이제 여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래 구현되어 실행된다. 이것이 스프링이 새로운 엔터프라이즈 기술을 도입하면서도 POJO를 유지하는 방법이다. (스프링의 PSA)
스프링은 엔터프라이즈 서비스들을 POJO 기반으로 만든 비즈니스 오브젝트에서 사용할 수 있게 해준다. IoC 컨테이너를 제공해서, 인스턴스들의 라이프 사이클을 관리하고, 특정 인터페이스를 구현하거나 상속할 필요가 없고 라이브러리를 지원하기에 용이하며 객체 또한 가벼운 것이 특징이며, OOP를 더 OOP답게 쓸 수 있게 해주는 AOP 기술을 적용해서 POJO 개발을 더 쉽게 만들어 준다.
POJO 기반의 코드인지 확인하는 두가지 기준
객체지향적으로 설계 되었는가?
반복적인 탬플릿 코드와 테스트하기 힘든 구조, 확장 및 재활용의 어려움이 남아있다면 EJB의 문제점을 여전히 안고 있는 것이다.
테스트에 용이한가?
잘 만들어진 POJO 어플리케이션은 자동화 된 테스트 코드 작성이 편리하다. 코드 작성이 편리하면 좀 더 꼼꼼하게 만들게 되고, 코드 검증과 품질 향상에 유리해진다. 또한, 잘 만들어진 테스트 코드 베이스가 있다면 리팩토링 할 여유가 생겨 POJO 코드를 좀 더 나은 설계구조로 변경할 수 있다.
진정한 POJO
토비의 스프링에서는 진정한 POJO를 아래와 같이 정의했다.
그럼 특정 기술규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가? 많은 개발자가 크게 오해하는 것 중의 하나가 바로 이것이다 …(중략)… 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
출처 :
POJO - (Plain Old Java Object)란 뭘까?
POJO - (Plain Old Java Object)란 뭘까?
POJO 자바나 스프링 프레임워크를 조금이라도 공부 해본 개발자 (혹은 학생)이라면 POJO 라는 단어를 한번쯤 듣게됩니다. POJO의 정의는 사실 그렇게 어렵지 않습니다. 아래 내용은 위키 백과에 나
siyoon210.tistory.com
'내일배움캠프 > Spring' 카테고리의 다른 글
| Spring Test (0) | 2022.12.29 |
|---|---|
| IoC 컨테이너 (0) | 2022.12.21 |
| DI (의존성 주입) (0) | 2022.12.21 |
| Annotation (1) | 2022.12.21 |
| UnsatisfiedDependencyException 에러 해결 (0) | 2022.12.16 |