공부해봅시당
[쉽게 배우자! Spring Triangle 0] POJO(Plain Old Java Object) 본문
Spring은 Spring Triangle이라고 부르는 핵심 3대요소를 제공해준다
이는 각각 IoC, AOP, PSA를 일컫는다
오늘은 POJO에 대해 알아보자
POJO(Plain Old Java Object)
"오래된 방식의 간단한 자바 객체"를 의미
특정 기술, 프레임워크, 컨벤션에 종속되지 않는 자바 객체를 지칭
Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 '무거운' 객체를 만들게 된 것에 반발해서 사용하게 됨
2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작함
특정 ‘기술’과 환경에 종속되어 의존하게 된 자바 코드는
가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어지는 단점이 있었습니다.
이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게 되는 것입니다.
그래서 POJO라는 개념이 등장했습니다.
- 마틴 파울러가 밝인 POJO의 기원 -
POJO는 자바의 기본 문법과 객체 지향 원칙에 따라 작성되며, 특정 규약이나 어노테이션, 인터페이스 구현 등을 요구하지 않음
POJO 개념의 도입은 자바 개발자들이 더욱 유연하고, 이식성 높으며, 재사용 가능한 코드를 작성할 수 있도록 도움을 줌
POJO 예시
이 클래스는 POJO의 전형적인 특징을 잘 보여줌 (단순성, 이식성, 테스트 용이성 등)
public class Employee {
private String name;
private int age;
public Employee() {
// 기본 생성자
}
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
// Getter와 Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
특별한 자바 기술이나 프레임워크에 의존하지 않는 단순한 자바 객체로,
EJB(Enterprise JavaBeans) 등에서 사용되는 Java Bean이 아닌
Getter와 Setter로 구성된 가장 순수한 형태의 기본 클래스를 POJO라고 함
EJB의 사용과 프로그램의 규모 증가로 특정 기술과 환경에 종속되어 의존하게 된 자바 코드는
가독성이 떨어져 유지보수에 어려움이 생기게 되고,
특정 기술의 클래스를 상속받거나 직접 의존하며 확장성이 매우 떨어져 점점 객체지향성을 잃어감
그래서 개발자들은 옛날 순수한 객체지향성이 컸던 시절로 돌아가자는 취지로 POJO라는 용어를 제시
이로인해 POJO는 EJB에 비해 훌륭한 객체의 단위가 될 수 있음
POJO의 특징
간단함
POJO는 복잡한 프레임워크에 의존하지 않으며, 단순한 자바 클래스로 구성됨
이는 자바의 기본 구성 요소(변수, 메서드, 생성자 등)만을 사용하여 정의됨
투명성
POJO는 특정 인터페이스를 구현하거나 클래스를 상속받지 않아도 되므로, 코드가 깔끔하고 이해하기 쉬움
이식성
프레임워크에 종속되지 않기 때문에, POJO 기반의 코드는 다양한 환경에서 쉽게 재사용될 수 있음
테스트 용이성
복잡한 의존성이 없기 때문에, POJO는 단위 테스트하기가 더 용이함
POJO의 중요성
POJO는 자바 개발에서 중요한 역할을 함
특히, 엔터프라이즈 애플리케이션을 개발할 때,
POJO를 사용하면 비즈니스 로직을 프레임워크나 서비스 로직으로부터 분리할 수 있어,
애플리케이션의 유지보수성과 확장성을 향상시킬 수 있음
또한, POJO는 스프링 프레임워크와 같은 현대적인 자바 기술 스택에서 광범위하게 사용되며,
이러한 프레임워크들은 POJO를 기반으로 한 프로그래밍 모델을 장려함
POJO 프레임워크
단순히 EJB 이전으로 돌아간다면 의미가 없기 때문에 POJO 프레임워크가 등장
POJO 프레임워크는 POJO를 사용하는 장점과
EJB에서 제공하는 엔터프라이즈 서비스와 기술의 장점을
그대로 사용할 수 있도록 도와주는 프레임워크
많은 POJO 프레임워크가 있지만 그 중에서 꼽히는 것은 스프링과 하이버네이트
스프링
엔터프라이즈 서비스들을 POJO 기반으로 만든 비즈니스 오브젝트에서 사용할 수 있게 해줌
IoC 컨테이너를 제공해서 인스턴스들의 라이프 사이클을 관리하고,
특정 인터페이스를 구현하거나 상속할 필요가 없음
또한 라이브러리를 지원하기 때문에 용이하게 사용할 수 있으며
객체 또한 가벼운 것이 특징임
OOP를 더 OOP답게 쓸 수 있게 해주는 AOP 기술을 적용해서 POJO 개발을 더 쉽게 만들어 줌
하이버네이트
Persistence 기술과 오브젝트-관계형 DB 매핑을 순수한 POJO를 이용해 사용할 수 있게 만드는
POJO 기반의 Persistence 프레임워크
JDBC API를 직접 사용해 개발하는 것 못지않은 성능과 복잡한 퍼시스턴스 로직을 개발 가능하게 해줌
하이버네이트가 사용하는 POJO 엔티티들은 객체지향적인 다양한 설계와 구현이 가능
특정 기술에 종속적이면 POJO가 아니라면서 스프링에서 하이버네이트 사용은 어떻게 가능한걸까?
바로 스프링에서 정한 표준 인터페이스가 있기 때문
스프링 개발자들은 ORM이라는 기술을 사용하기 위해서 JPA라는 표준 인터페이스를 정해두었고,
여러 ORM 프레임워크들은 이 JPA라는 표준 인터페이스 아래에서 구현되어 실행됨
이것이 바로 스프링이 새로운 엔터프라이즈 기술을 도입하면서도 POJO를 유지하는 방법
이런 방법을 스프링의 PSA(Portable Service Abstraction)라고 이야기함
POJO 프로그래밍의 가치
단순히 POJO 프레임워크를 사용한다고, POJO 개발을 자연스럽게 하는 것은 아님
POJO 기반의 코드인지를 확인하는 두 가지 기준
1. 객체지향적으로 설계 되었는가?
반복적인 템플릿 코드와 테스트하기 힘든 구조, 확장 및 재활용의 어려움이 남아있다면 EJB의 문제점을 여전히 안고 있는 것
2. 테스트가 용이한가?
잘 만들어진 POJO 어플리케이션은 자동화된 테스트 코드 작성이 편리함
코드 작성이 편리하면 좀 더 꼼꼼하게 만들게 되고, 코드 검증과 품질 향상에 유리해짐
또한, 잘 만들어진 테스트 코드베이스가 있다면 리팩토링할 여유가 생겨 POJO 코드를 좀 더 나은 설계구조로 변경할 수 있음
진정한 POJO란?
그럼 특정 기술규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가?
많은 개발자가 크게 오해하는 것 중의 하나가 바로 이것이다.
. .(중략). .
진정한 POJO란 객체지향적인 원리에 충실하면서,
환경과 기술에 종속되지 않고
필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.
- 토비의 스프링 -
POJO와 IoC, AOP, PSA의 관계
POJO(Plain Old Java Object)는 자바의 기본적인 객체로서, 특정 기술이나 프레임워크에 의존하지 않는 간단하고 재사용 가능한 코드 조각을 의미
이러한 POJO를 활용하여 스프링 프레임워크는 IoC(Inversion of Control)/DI(Dependency Injection)와 AOP(Aspect-Oriented Programming), 그리고 PSA(Portable Service Abstraction)와 같은 고급 프로그래밍 개념을 제공
IoC/DI는 객체의 생성과 객체 간의 의존성을 외부 컨테이너가 관리하도록 하여, 코드의 결합도를 낮추고 유연성을 높임
AOP는 공통의 관심사(예: 보안, 로깅)를 분리하여 재사용 가능한 모듈로 만들고, 이를 애플리케이션의 다른 부분에 적용할 수 있게 해줌
PSA는 다양한 서비스(예: 트랜잭션 관리, 메시징)를 일관된 방식으로 제공하여, 기술 스택 간의 이동성을 향상시키고 개발자의 부담을 줄여줌
이 모든 개념은 POJO를 기반으로 하여, 개발자가 보다 깔끔하고 유지보수가 쉬운 애플리케이션을 구축할 수 있도록 도움을 줌
참조
https://dev-coco.tistory.com/82
[Spring] POJO(Plain Old Java Object)란?
참고 포조(Plain Old Java Object, POJO)가 뭘까? [ 위키백과 ] Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사
dev-coco.tistory.com