[Java/Spring] POJO를 다시 짚어보자!

ym·2022년 6월 28일
0

spring

목록 보기
1/1
post-thumbnail

POJO (Plain Old Java Object) 란?

POJO는 자바 및 스프링 공부를 하다보면 많이 볼 수 있는 기본개념이다.

일단, 사전적 정의를 해보자면

오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어

특정 기술과 환경에 종속되어 의존하게 된 자바코드는, 자바가 가진 객체지향의 장점을 잃으며 유지보수가 떨어지고 가독성이 나빠지게 되었다.

아래의 예제코드를 보면 쉽게 이해가 가능할 것 같다.

public class User { 
	private String name; 
	private String address; 

	public String getName() { 
		return name; 
	} 

	public String getAddress() { 
		return address 
	} 

	public void setName(String name) { 
		this.name = name; 
	} 

	public void setAddress(String address) { 
		this.address = addres; 
	} 
}

이처럼 가장 기본적인 getter, setter 형태를 띄고있는 순수한 클래스를 POJO라 한다.

POJO 조건 및 장점은?

  1. 특정 규약에 종속되지 않음
    • 객체지향적으로 설계가 가능해짐
    • 로우레벨과 비지니스 코드가 분리되어 가독성 좋은 코드 작성이 가능
  2. 특정 환경에 종속되지 않음
    • 테스트 하기 유용함
  3. 단일 책임 원칙을 지켜야 함

POJO 프레임워크

pojo의 장점과 기존 EJB에서 제공하는 기술을 사용할 수 있도록 도와주는 프레임워크이다.

대표적으로 스프링과 하이버네이트가 있다.

  • 스프링

IoC 컨테이너를 제공해서, 인스턴스들의 라이프 사이클을 관리한다.

특정 인터페이스를 구현하거나 상속할 필요가 없고 라이브러리를 지원하기에 용이하다.

객체가 가벼운 것이 특징이며, OOP를 더 OOP답게 쓸 수 있게 해주는 AOP 기술을 적용해서 POJO 개발을 더 쉽게 만들어준다.
Aop는 나중에 한번 더 다룰 예정

  • 하이버네이트

Persistence 기술과 오브젝트-관계형 DB 매핑을 순수한 POJO를 이용해 사용할 수 있게 만드는 POJO기반의 퍼시스턴스 프레임워크이다.

하이버네이트가 사용하는 POJO Entity들은 객체지향적인 다양한 설계와 구현이 가능하다는 장점이 있다.

근데 위에서 계속 특정 규역 및 환경에 종속적이면 POJO가 아니라 하였는데, 하이버네이트는 어떻게 사용하는걸까? 🤔

스프링에서 정한 표준 인터페이스인 JPA가 있기 때문이다.

여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래에서 실행된다.

그리하여 스프링이 새로운 엔터프라이즈 기술을 도입하면서 POJO를 유지할 수 있다.

이러한 방법을 스프링의 PSA라고 한다.

마지막으로.. 유명한 개발 저서인 토비의 스프링에서

그럼 특정 기술 규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가? 많은 개발자가 크게 오해하는 것이 이거다. 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.

POJO 방식을 활용한 많은 라이브러리도 있지만.. 그 개념을 잊지 않고 의식하며 개발해야되는 것이 개발자의 몫이라 생각된다.

profile
개발을 즐기기 위해 공부하는 백앤드 개발자

0개의 댓글