포조(Plain Old Java Object, POJO) 이해하기

    포조(Plain Old Java Object, POJO) 개념

    스프링(Spring)을 공부 하거나, 자바를 공부하다보면 POJO(Plain Old Java Object)라는 용어를 자주 보게 될 것이다. 그때마다 뭔말이야? 하면서 넘어가는 경우가 많을텐데 왜냐하면 정말 별 말이 아니기 때문이다.

     

    포조는 Java EE 등으로 인해서 점점 무거워지는 객체에 대해서 반발하며 나타난 개념이다. 2000년 9월에 마틴 파울러(Martin Fowler), 레베카 파슨(Rebecca Parsons), 조쉬 맥킨지(Josh MacKenzie) 등이 시작하였으며 그 기원에 대한 내용은 마틴 파울러가 다음과 같이 말했다.

     

    UML, 애자일, 디자인패턴 등에 영향을 끼친 수석 프로그래머인 마틴 파울러

     

    "We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it's caught on very nicely.d"

    "우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아 글쎄, 다들 좋아하더라고."

     

    한마디로 그냥 단순한 자바 객체(우리가 주로 만드는 VO, Entity이다)를 쓰라라는 말보다 POJO라고 이름을 지으니깐 뭔가 새로운 기술같고 있어보여서 사람들이 쓰기 시작했다라는 것이다...

     

    스프링(Spring)에서의 POJO

     

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

     

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

     

    POJO가 아닌 객체

     

    클래스 확장

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

    인터페이스 구현

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

    annotation 포함

    @javax.persistence.Entity public class Baz { ...

     

    위와 같이 순수한 자가 객체에 양념이 들어간 녀석들은 POJO가 아니다.

     

    타언어의 POJO 현상

    POJO는 다른 언어에도 영향을 많이 끼쳤다.

    POPO : Plain Old PHP Object (PHP)
    POCO : Plain Old CLR Object (.NET)
    PODS : Plain Old Data Structures (C++)
    POD : Plain Old Documentation (Perl)

     

     

    참고자료

    https://qastack.kr/programming/1612334/difference-between-dto-vo-pojo-javabeans
    https://en.wikipedia.org/wiki/Plain_old_Java_object
    https://ko.wikipedia.org/wiki/Plain_Old_Java_Object

     

    댓글

    Designed by JB FACTORY