Search

POJO란

Tags
POJO
Date
2023/12/23

개요

스프링 개발을 공부하면서 수 없이 들었던 POJO,,, 정작 제대로된 의미는 모르는 거 같아 오늘 포스팅에서는 POJO에 대해 다뤄볼까 합니다.

1. POJO란?

Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다.
 
다시 한번 쉽게 생각해봅시다.
위 이미지는 POJO를 설명할 때면 어김없이 등장하곤 하는데요, POJO는 자바로 생성하는 순수한 객체를 의미합니다. 즉, 객체 지향의 원리에 충실하면서 프레임워크나 외부 라이브러리에 종속되지 않은 오브젝트를 의미합니다.
사실 POJO에 대한 궁금증이 생겼던 건 다음 강의 명을 본 뒤였는데요, “구현이면 그냥 구현이지 POJO 구현은 뭐야” 라고 생각했습니다.
하지만 포스팅을 하면서 POJO에 대해 알아보고 강의에서 학습한 내용들을 되돌아보니 POJO가 무엇인지 확실히 알게 되었습니다.

2. 코드로 알아보는 POJO

강의에서는 Service 계층과 Repository 계층을 사용하여 간단하게 상품을 등록하는 테스트 코드를 만들었는데요, POJO 라는 의미에 걸맞게 외부 라이브러리를 사용하지 않고 오로지 자바 코드로만 테스트를 진행했습니다.
상품_등록_테스트()
@Test void 상품등록() { final AddProductRequest request = 상품등록요청_생성(); productService.addProduct(request); } private static AddProductRequest 상품등록요청_생성() { final String name = "상품명"; final int price = 1000; DiscountPolicy discountPolicy = DiscountPolicy.NONE; return new AddProductRequest(name, price, discountPolicy); }
Java
복사
ProductSerivce.java
class ProductService { private final ProductPort productPort; ProductService(ProductPort productPort) { this.productPort = productPort; } public void addProduct(AddProductRequest request) { Product product = new Product(request.name(), request.price(), request.discountPolicy()); productPort.save(product); } }
Java
복사
ProductRepository.java
class ProductRepository { private Map<Long, Product> persistence = new HashMap<>(); private Long sequence = 0L; public void save(final Product product) { product.assignId(++sequence); persistence.put(product.getId(), product); } }
Java
복사
생략된 도메인 클래스들이 있지만, HashMap을 통해 직접 Repository를 구현하고, Serivce에서는 이를 주입하는 형태로 POJO 상품 등록 기능이 구현되었습니다!