[Java] POJO(Plain Old Java Object)

2025. 9. 16. 12:07·Java

POJO 원칙 (Plain Old Java Object) 

"오래된 방식의 순수한 자바 오브젝트"

POJO는 정말 말 그대로 오래된 방식의 간단한 자바 객체를 말한다. 

 

반면, 특정 기술과 환경에 종속되어 사용되는 기술을 EJB(Enterprise Java Beans)라고 한다. 이 EJB는 자바 개발을 할 때 로우 개발에 신경 쓰지 않고 개발을 쉽게 하도록 도와주지만, 특정 기술에 의존하여 확장성이 떨어지고 객체지향성을 잃어버리게 된다. 

 

따라서 옛날에 객체지향성이 큰 순수한 방식으로 돌아가자는 의미로 POJO가 탄생하게 되었다. 

특정 '기술'과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어진다는 단점이 있었습니다. 이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게 되는 것입니다. 그래서 POJO라는 개념이 등장했습니다. 

 

예시) 아래 코드가 가장 기본적인 형태의 Java POJO라고 한다. 특정 라이브러리나 프레임워크의 의존 없이 독립적인 자바 객체이다. 

public class Person {
	
    private String name;
    private int age;
    
    public String getName(){
    	return name;
    } 
    
    public Int getAge(){
    	return age;
    }
    
    public void setName(String name){
    	this.name = name;
    }
    
    public void setAge(Int age){
        this.age = age;
    } 
}

POJO의 조건 

1) 특정 규약에 종속되면 안된다. 

Java 언어와 꼭 필요한 API 외 다른 것에 종속되면 안된다. 

 

2) 특정 환경에 종속되면 안된다. 

환경에 종속되지 않고 독립적이어야 한다. 예를 들어,웹 기술의 클래스나 인터페이스를 상속받거나 구현하면 해당 객체는 웹 환경에서만 사용가능 할 것이다. 이처럼 특정 환경에 종속되어서는 안된다. 

 

3) 객체 지향적 원리를 지켜야 한다. 

POJO는 자바의 기본인 객체지향적 원리를 지켜야 한다. 하나의 클래스는 하나의 책임과 역할을 갖도록 하는 등 객체지향 설계를 적용해야 진정한 POJO라고 볼 수 있다. 

 

POJO 프레임워크 

POJO 자체는 단순하지만, 실무에서는 트랜잭션이나 보안, 캐시와 같은 엔터프라이즈 기능이 필요하다. 그래서 등장한 것이 POJO 프레임워크이다. POJO를 그대로 두면서도, 필요한 기능은 프레임워크가 제공하는 형태이다. 대표적인 예시가 Spring이다. 

 

Spring이 POJO 프레임워크인 이유 

개발자가 작성하는 서비스, 도메인 객체는 전형적인 POJO이다. 

그리고 여기에 프레임워크가 부가 기능을 붙여준다. 

  • DI/IoC (제어의 역전) : POJO 객체를 스프링 컨테이너가 생성하거나 주입해준다. 
  • AOP (관점 지향 프로그래밍) : 트랜잭션, 로깅, 보안 같은 횡단 관심사를 POJO 코드에 흩뿌리지 않고 주입한다. 
  • PSA (서비스 추상화) : 캐시, 트랜잭션, 데이터 접근 같은 기술을 공통 인터페이스로 제공한다. 

 

'Java' 카테고리의 다른 글

[Java] 자바 변수 4가지 정리 (전역, 지역, 정적, 멤버 변수)  (0) 2025.11.10
[Java] 원시타입(Primitive Type)과 참조타입(Reference Type)  (0) 2025.10.14
[Java] 스트림(Stream)에 대하여  (0) 2025.10.14
[Java] 실수를 나타내는 Double, double, float, decimal 의 차이  (0) 2025.10.13
[Java] 객체지향설계의 5가지 원칙 (SOLID 원칙)  (2) 2025.08.03
'Java' 카테고리의 다른 글
  • [Java] 원시타입(Primitive Type)과 참조타입(Reference Type)
  • [Java] 스트림(Stream)에 대하여
  • [Java] 실수를 나타내는 Double, double, float, decimal 의 차이
  • [Java] 객체지향설계의 5가지 원칙 (SOLID 원칙)
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    레디스
    coderabbit
    MongoDB
    운영체제
    스프링부트
    자바
    jira
    promtail
    AI
    도커
    OS
    지라
    Spring
    파인튜닝
    TDD
    깃
    docker
    java
    Network
    springboot
    코드레빗
    redis
    몽고디비
    STT
    네트워크
    스프링
    github
    깃허브
    CoolSMS
    git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Java] POJO(Plain Old Java Object)

티스토리툴바