Java

POJO(Plain Old Java Object)

후후후하하하 2024. 5. 25. 19:40

POJO : 평범한 오래된 자바 객체

  • 자바 언어 스펙을 제외한, 특정 기술(프레임워크)에 대한 종속성이 없는 객체.
  • 즉, 어떤 자바 프로젝트에서도 사용 가능한 객체.
  • Java 언어 자체 규약에 의한 제한 외의 규약에 구속받지 않는 Java 객체.
  • 제약사항
    • 미리 지정된 클래스를 extend 해서는 안된다. 즉, 어떤 클래스의 자식클래스가 될 수 없다.
    • 미리 지정된 인터페이스를 implement 해서는 안된다.
    • 미리 정의된 어노테이션을 포함해서는 안된다.
  • 장점
    • 비즈니스 로직과 특정 환경 종속적인 코드를 분리하기 때문에 코드가 단순해진다.
    • 특정 환경에 종속적인 로직이 포함된 객체는 테스트가 어렵지만, POJO는 그렇지 않다. 즉, 테스트 자동화에 유리하다.
    • 객체지향적인 설계를 자유롭게 적용할 수 있다.

 

POJO vs Java Bean

  • POJO는 그 자체로 사용할 수 있는 객체를 의미
  • Java Bean은 좀 더 많은 제약 사항이 추가된다.
    • 기본 생성자가 존재해야 한다.
    • 필드의 접근 제어자가 private 이어야 하며, 필드는 getter, setter로만 접근해야 한다.
    • 직렬화 가능해야한다. 즉, Serializable 인터페이스를 구현해야 한다.

 

POJO(Plain Old Java Object)

  • 특정 프레임워크, 규칙, 컨벤션 등에 의존하지 않고, 단순히 필드와 메서드로 구성된 순수한 자바 객체를 의미한다.
  • 이는 2000년대 초반 EJB와 같은 복잡하고 무거운 Java 엔터프라이즈 스펙에 대한 반발로 등장한 개념이다.
  • 정의
    • 프레임워크 비의존성 : 특정 프레임워크에 종속되지 않으며, 필요한 경우 여러 프레임워크와 쉽게 통합할 수 있다.
    • 간결성 : 불필요한 인터페이스 구현이나 상속 없이, 필요한 필드와 메서드만 포함한다.
    • 유연성 : 다양한 환경에서 재사용 가능하며, 비즈니스 로직을 간단하고 명확하게 유지한다.
  • 주요 특성
    • 프레임워크 비의존성
    • 경량성 : 불필요한 기능이나 메타데이터 포함하지 않는다. 클래스가 가볍고 이해하기 쉬운 상태로 유지가능
    • 순수한 자바 : 특별한 런타임 환경이나 설정이 필요하지 않음
    • 테스트 용이성 : 외부 종속성이나 프레임워크에 의존하지 않으므로 단위테스트 작성이 용이하다.

 

 

  1. POJO와 자바빈(JavaBean)의 차이점은 무엇인가요?
    1. 자바빈은 몇 가지 추가적인 규칙이 있다. 기본 생성자 + getter, setter, Serializable 인터페이스 구현.
  2. Pojo를 사용하는 주요 프레임워크는 무엇이 있나요?
    1. Spring, Hibernate. Spring은 POJO를 빈으로 관리하여 DI를 제공. Hibernate는 POJO를 엔티티로 사용하여 데베 테이블과 매핑한다.
    2. AOP 같은 인터페이스를 기반으로 생성되는 프록시가 빈에 등록되면 POJO가 아닐 수 있다.