POJO(Plain Old Java Object)란?

  • 직역: 오래된 방식의 순수한 자바 오브젝트
  • 특정 프레임워크나 라이브러리에 종속되지 않고, 자바의 기본적인 객체 모델을 따르는 클래스
  • Java EE 등의 중량 프레임워크를 사용하게 되면서 무거운 객체를 만들게 된 것에 반발해서 사용된 용어
  • 스프링 프레임워크에서 POJO 방식을 사용

POJO의 주요 특징

  1. 간결하고 순수한 객체: POJO는 간단하며 순수한 자바 객체로, 특정 프레임워크나 라이브러리에 종속되지 않습니다. 이는 코드를 더 간결하게 유지하고 유연성을 높여줍니다.
  2. 자바 빈 규약을 따름: POJO는 자바 빈(JavaBean) 규약을 따릅니다. 이 규약에 따르면 클래스는 기본 생성자, getter 및 setter 메서드, 직렬화 가능한(serializable) 인터페이스를 구현해야 합니다.
  3. 프레임워크와 독립적: POJO는 특정 프레임워크나 라이브러리에 종속되지 않으므로 어떤 자바 환경에서도 사용할 수 있습니다. 이는 코드의 재사용성을 높이고 시스템을 유지 보수하기 쉽게 만듭니다.
  4. 용도: POJO는 다양한 용도로 사용됩니다. 가장 일반적인 사용 사례는 데이터 객체, 데이터 전송 객체(DTO), 엔터티 객체, 비즈니스 로직을 담은 객체, 웹 애플리케이션에서 폼 데이터를 처리하는 객체 등입니다.
  5. 프레임워크와 통합: POJO는 주로 다양한 자바 기반의 프레임워크와 라이브러리와 함께 사용됩니다. 예를 들어, 스프링(Spring) 프레임워크에서는 POJO를 기반으로 의존성 주입(Dependency Injection)을 수행하고, Hibernate와 같은 ORM(Object-Relational Mapping) 라이브러리는 POJO를 데이터베이스 테이블과 매핑하기 위해 사용됩니다.

POJO가 아닌 경우

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

    public class Foo extends javax.servlet.http.HttpServlet { ...
    
  2. 미리 정의된 인터페이스의 구현:

    public class Bar implements javax.ejb.EntityBean { ...
    
  3. 미리 정의된 애너테이션을 포함:

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

왜 POJO를 지향해야 하는가?

  • 특정 기술과 환경에 의존하게 된 자바 코드는…
    • 가독성이 떨어져 유지보수가 어려움
    • 확장성이 매우 떨어짐

=> 객체지향 설계의 장점들을 잃어버리게 된다

정리

  • POJO는 특정 프레임워크나 라이브러리에 종속되지 않고, 자바의 기본적인 객체 모델을 따르는 클래스를 말합니다. 특정 프레임워크나 라이브러리에 의존하게된 자바 코드는 가독성이 떨어져 유지보수에 어려움이 있으며, 확장성 역시 떨어져 객체지향 설계의 장점을 잃어버리게 됩니다. 이를 방지하기 위해 POJO 방식이 등장하게 되었으며, 대표적으로 스프링 프레임워크에 사용되고 있습니다.

참고

보완/복습

  • 2023.11.07 복습