정의
Plain Old Java Object(POJO)는 특별한 프레임워크나 라이브러리 규약에 종속되지 않은, 순수한 자바 클래스이다. 일반적으로 접근자(getters)와 설정자(setters), 기본 생성자, 그리고 필드와 메서드만으로 구성되며, 특정 인터페이스 구현이나 상속, 어노테이션 등의 제약을 요구하지 않는다.
주요 특징
| 특징 | 설명 |
|---|---|
| 프레임워크 독립성 | POJO는 특정 프레임워크(API)와 결합되지 않아, 다양한 환경에서 재사용이 가능하다. |
| 단순 구조 | 필드와 메서드, 기본 생성자 등 최소한의 코드로 이루어져 가독성이 높다. |
| 직렬화 가능 | java.io.Serializable 인터페이스를 구현하면 객체를 직렬화할 수 있다(필수는 아니다). |
| 테스트 용이성 | 외부 의존성이 적어 단위 테스트가 간단히 수행된다. |
| 캡슐화 | 필드는 private으로 선언하고, 접근자는 public 메서드 형태로 제공한다. |
사용 사례
- 도메인 모델: 비즈니스 로직을 표현하는 엔터티 객체로 활용된다. 예)
User,Order클래스. - 데이터 전송 객체(DTO): 계층 간 데이터 교환에 사용되며, 직렬화/역직렬화가 용이하다.
- ORM 매핑: Hibernate, JPA 등에서 엔터티 클래스를 POJO 형태로 정의한다.
- 테스트 스텁: 의존성 주입 프레임워크에서 목 객체(mock)로 사용된다.
역사·어원
- 어원: “Plain Old”는 “평범하고 특별한 것이 없는”이라는 의미의 영문 관용구이다. 이는 2000년대 초반, Java 커뮤니티에서 복잡한 EJB(Enterprise JavaBeans) 등과 대비하여 단순한 자바 클래스를 강조하기 위해 도입되었다.
- 도입 시기: 2000년대 초, Martin Fowler와 Jim Webber가 제안한 개념으로, 당시 복잡한 엔터프라이즈 프레임워크에 대한 비판적 입장에서 사용되었다.
관련 용어
- POCO(Plain Old CLR Object): .NET 환경에서 POJO와 동등한 개념.
- POGO(Plain Old Groovy Object): Groovy 언어에서 유사한 의미.
참고 문헌
- Martin Fowler, Patterns of Enterprise Application Architecture (2002).
- JSR 317: Java Persistence API, 2.0 Specification.
위 내용은 Java 프로그래밍 분야에서 널리 인정받는 정의와 활용 사례를 기반으로 하며, 확인된 자료에 근거한다.