POJO(Plain Old Java Object)란 무엇일까?

이민형·2022년 7월 14일
0
post-thumbnail

POJO(Plain Old Java Object)

Spring이나 JAVA를 공부하다 보면 POJO(Plain Old Java Object) 라는 단어를 자주 보게 될텐데 뭔가 대단한 의미가 있어보이는 이 단어는 사실 그렇게 대단한 의미가 있는 단어는 아니다.

POJO는 말 그대로 순수한 자바 오브젝트를 뜻한다.

POJO라는 개념은 예전에 JavaEE등의 중량 프레임워크(특히 EJB) 을 사용하면서 단순한 자바 오브젝트를 사용해서 개발하는 것이 아닌 프레임워크에 종속적인 부분으로 개발을 진행했다.
그로 인하여 모듈의 교체, 시스템 업그레이드 시 종속성으로 인한 불편함이 발생을 했고
해당 프레임워크에 종속된 무거운 객체를 만들게 되는 것에 반발하여
2000년 9월 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어이다.

마틴 파울러는 이 용어에 대한 기원을 다음과 같이 밝혔다.

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

뭔가 특별한 의미가 있을줄 알았지만 그런건 없다.
그러면 이제 어떤것이 POJO인지 알아보자.

POJO 를 지킨 예제

public class POJOMember {
    private String id;
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

위의 예제처럼 다른 클래스나 인터페이스를 extendsimplements 받아 메서드를 구현해야 하는 클래스가 아닌, getter/setter 와 같이 기본적인 기능만 가진 자바 객체를 뜻한다.

POJO 를 지키지 않은 예제

public class MainKey extends KeyAdapter {

    @Override
    public void keyTyped(KeyEvent e) {
        super.keyTyped(e);
    }

    @Override
    public void keyPressed(KeyEvent e) {
        super.keyPressed(e);
    }

    @Override
    public void keyReleased(KeyEvent e) {
        super.keyReleased(e);
    }
}

Key의 기능을 사용하기 위해 KeyAdapter 클래스를 상속받은 모습이다.
이렇게 사용하면 다른 솔루션을 사용하고자 할 때 많은 양의 코드를 리팩토링하는 문제가 발생한다.
위처럼 특정 기술이나 환경에 종속되어 의존하게 되면, 코드의 가독성 뿐 만이 아니라 유지보수나 확장에도 어려움이 생겨서 POJO라는 개념이 등장 한 것이다.

POJO 기반의 코드인지 확인 방법

  1. 특정 규약이나 환경에 종속되어 있지 않은지?
  2. 객체지향적으로 설계 되었는지?
  3. 테스트가 용이한지?

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

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

POJO Framework

POJO 프로그래밍이 가능하도록 기술적인 기반을 제공하는 프레임워크는 대표적으로 두가지가 있다

  1. Spring Framework
  2. Hibernate

POJO 의 장점

  1. 코드가 깔끔해진다.
  2. 자동화된 테스트에 유리하다.
  3. 객체지향적인 설계를 자유롭게 적용할 수 있다.

0개의 댓글