웹 프로그래밍/[ Spring ]

[ Spring ] 04. POJO (Plain Old Java Object)에 관해

kim.svadoz 2021. 6. 30. 16:37
반응형

POJO


Plain Old Java Object

오래된 방식의 간단한 자바 오브젝트 라는 말로서, Java EE 등 중량 프레임워크들을 사용하게 되면서 점점 무거운 객체를 만들게 된 것에 반발해서 생겨난 개념이다.

오래된 방식의 간단한 자바 오브젝트가 무엇일까?

쉽게 말하자면, 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 일컫는다.

예를들어, ORM(Object Relationship Mapping)이 새롭게 등장했을 때를 생각해보자. ORM 기술을 사용하고 싶다면 ORM을 지원하는 ORM 프레임워크를 사용해야 한다. (대표적으로 Hibernate라는 프레임워크가 있다.)
만약, 자바 개체가 ORM 기술을 사용하기 위해서 Hibernate프레임워크를 직접 의존하는 순간, 이는 POJO라고 할 수 없다.

특정 기술에 종속되었기 때문이다.

POJO를 지향해야 하는 이유

스프링 프레임 워크 이전에는 원하는 엔터프라이즈 기술이 있다면 그 기술을 직접적으로 사용하는 객체를 설계했다. 그리고 이러한 개발 방식이 만연했고, 특정 기술과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수에 어려움이 생긴 것이다.

또한, 특정 기술의 클래스를 상속받거나, 직접 의존하게 되어 확장성이 매우 떨어지는 단점이 있었다.

이 말은 객체지향의 화신인 자바가 객체지향 설계의 장점들을 잃어버리게 된 것이다.

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

Spring에서의 POJO

스프링 프레임워크는 IoC(Inversion of Control, 제어의 역전) 컨테이너 안에서 POJO를 구성 및 관리하는 것이 가장 핵심으로 POJO를 매우 잘 다루는 프레임워크가 바로 스프링 프레임워크이다.

Java EE 등을 사용할 때에 비해서 특정 인터페이스를 구현하거나 상속할 필요가 없고 라이브러리를 지원하기에 용이하며 객체 또한 가벼운 것이 특징이다.

특정 기술을 사용하고 싶다면?

스프링이 POJO를 유지하면서 Hibernate를 사용할 수 있는 이유? -> PSA

Hibernate는 스프링 개발에서 많이 사용되고 있는 기술이다. 특정 기술에 종속적이면 POJO가 아니라면서 스프링에서는 어떻게 가능한걸까?

바로 스프링에서 정한 표준 인터페이스가 있기 때문이다.

스프링 개발자들은 ORM이라는 기술을 사용하기 위해서 JPA라는 표준 인터페이스를 정해두었다.

그리고 이제 여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래, 구현되어 실행된다. 이것이 스프링이 새로운 엔터프라이즈 기술을 도입하면서도 POJO를 유지하는 방법이다.

이런 방법을 스프링의 PSA라고 이야기한다.

진정한 POJO란

토비의 스프링에서는 진정한 POJO를 아래와 같이 정의했다고 한다.

그럼 특정 기술규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가? 많은 개발자가 크게 오해하는 것 중의 하나가 바로 이것이다. ...(중략)... 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.

참조

https://siyoon210.tistory.com/120

반응형