POJO(Plain Old Java Object)
위 이미지는 Spring 삼각형이라는 이미지로 Spring의 핵심 개념들을 모두 표현하고 있다.
POJO는 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는것을 의미한다.
POJO란 Plain Old Java Object의 약자로, 직역하면 순수한 오래된 자바 객체이다(Java로 생성하는 순수한 객체를 뜻함).
POJO는 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 의미한다.
POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 한다.
POJO 프레임 워크
POJO 프레임워크는 POJO를 사용하는 장점과 EJB에서 제공하는 엔터프라이즈 서비스와 기술을 그대로 사용할 수 있도록 도와주는 프레임워크이다.
POJO 프레임워크의 대표적인 것으로는 하이버네이트와 스프링이 있다.
하이버네이트
Persistence 기술과 오브젝트-관계형 DB 매핑을 순수한 POJO를 이용해 사용할 수 있게 만드는 POJO 기반의 퍼시스턴스 프레임워크
JDBC API를 직접 사용해 개발하는 것 못지않은 성능과 복잡한 퍼시스턴스 로직을 개발 가능하게 해주었기 때문이다.
하이버네이트가 사용하는 POJO 엔티티들은 객체지향적인 다양한 설계와 구현이 가능하다.
스프링
엔터프라이즈 서비스들을 POJO 기반으로 만든 비즈니스 오브젝트에서 사용할 수 있게 해준다.
IoC 컨테이너를 제공해서, 인스턴스들의 라이프 사이클을 관리하고, 특정 인터페이스를 구현하거나 상속할 필요가 없고 라이브러리를 지원하기에 용이하며 객체 또한 가벼운 것이 특징이며, OOP를 더 OOP 답게 쓸 수 있게 해주는 AOP 기술을 적용해서 POJO 개발을 더 쉽게 한다.
POJO 프로그래밍
POJO 프로그래밍은 POJO를 이용하여 프로그래밍 코드를 작성하는 것이다.
그러나 순수 자바 객체만을 사용한다고 해서 POJO 프로그래밍이라고 볼 수 없으며, POJO 프로그래밍으로 작성한 코드가 되기 위해서는 기본적인 규칙들을 지켜야 한다.
- 특정 규약에 종속되지 않는다.
- Java나 Java의 스펙에 정의된 것 이외에 다른 기술이나 규약에 얽매이지 않아야 한다.
- 특정 환경에 종속적이지 않는다.
- 환경에 독립적이어야 하며 특정한 프레임워크에서만 동작이 가능하면 안 된다.
- 웹이라는 환경 정보나 웹 기술을 담고 있는 클래스나 인터페이스를 사용해서는 안 된다.
- 환경에 독립적이어야 하며 특정한 프레임워크에서만 동작이 가능하면 안 된다.
- 객체 지향적 원리에 충실해야 한다.
- 객체 지향적 원리 : 상속, 캡슐화, 다형성, 추상화
POJO를 지키지 않은 코드
public class POJOClass extends UserService{
private String name;
private int age;
@Override
public List<User> findUsers() {
return super.findUsers();
}
}
- UserService 클래스 기능을 사용하기 위해 상속받은 코드로 이 경우 UserService의 메서드를 사용하기 위해 많은 코드를 리팩토링 해야하며, 코드의 가독성 및 유지보수나 확장 측며네서 어려움이 생긴다.
POJO를 지킨 코드
package com.jpasample.service;
public class POJOClass {
private String name;
private int age;
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;
}
}
- 단순한 Getter, Setter로 POJO의 개념을 지킨 코드
public class POJOClass{
@Autowired
UserRepository userRepository;
private String name;
private int age;
public void test(){
userRepository.findAll();
}
}
- 의존성 주입을 활용해 느슨한 결합력을 가지게 되고, 상속과 구현 없이도 해당 클래스의 메서드에 접근할 수 있다.
POJO의 이점
- 간결하고 깔끔하게 코드를 작성할 수 있다.
- 간편하게 테스트를 할 수 있다.
- 코드가 간결해져 디버깅이 상대적으로 쉬워진다.
- 특정 기술이나 환경에 종속적이지 않기 때문에 테스트가 쉬워진다.
- 객체지향적인 설계를 자유롭게 적용할 수 있다.
진정한 POJO란?
토비의 스프링에서는 진정한 POJO를 아래와 같이 정의했다.
"진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다."
'항해 99 > Spring' 카테고리의 다른 글
프로젝트 코드 분석 (0) | 2024.04.23 |
---|---|
Reflection API (0) | 2024.04.23 |
Spring boot 모니터링 with Prometheus, Grafana (1) | 2024.04.20 |
낙관적 락 & 비관적 락 (0) | 2024.04.19 |
Spring Actuator (1) | 2024.04.18 |