객체지향에 집중하고, 특정 클래스나 라이브러리에 종속되지 않는 필요에 따라 재활용 될 수있는 방식으로 설계된 오브젝트
POJO는 특정한 Java 객체로, 특별한 프레임워크나 라이브러리의 요구 사항을 따르지 않는 순수한 Java 객체를 의미합니다. POJO는 Java 언어 자체의 기능만을 이용하여 작성된 객체로, 주로 데이터 모델을 표현하는 데 사용됩니다.
POJO (Plain Old Java Object)가 뭘까?
[ 위키백과 ]
Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다.
특정 ‘기술’과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어지는 단점이 있었습니다. 이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게 되는 것입니다. 그래서 POJO라는 개념이 등장했습니다.
POJO의 특징
- 순수성: 특별한 프레임워크나 라이브러리에 의존하지 않고, Java 언어의 표준 기능만 사용합니다.
- 간단성: 비즈니스 로직과 관련된 코드를 단순화하여, 이해하고 유지보수하기 쉽게 만듭니다.
- 특별한 규칙 없음: POJO는 특정한 규칙이나 인터페이스를 구현해야 할 필요가 없습니다.
POJO의 장점
- 가독성: POJO는 단순한 Java 객체로, 코드가 직관적이고 가독성이 높습니다.
- 유지보수 용이성: POJO는 복잡한 상속 구조나 의존성 주입 없이도 쉽게 유지보수할 수 있습니다.
- 재사용성: POJO는 특정 프레임워크나 라이브러리에 종속되지 않으므로, 다양한 상황에서 재사용할 수 있습니다.
POJO의 단점
- 기능 제한: POJO는 특정 프레임워크나 라이브러리의 고급 기능을 사용할 수 없으므로, 직접적인 기능 구현이 필요할 수 있습니다.
- 초기 설정 필요: POJO를 사용할 때는 모든 설정과 초기화 작업을 직접 구현해야 합니다.
POJO 예시
public class User {
private Long id;
private String name;
private String email;
// 기본 생성자
public User() {}
// 매개변수를 받는 생성자
public User(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getter 및 Setter 메서드
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
// toString 메서드
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
public class Main {
public static void main(String[] args) {
// POJO 객체 생성
User user = new User();
user.setId(1L);
user.setName("John Doe");
user.setEmail("john.doe@example.com");
// 데이터 출력
System.out.println(user);
// 생성자를 사용하여 POJO 객체 생성
User anotherUser = new User(2L, "Jane Smith", "jane.smith@example.com");
// 데이터 출력
System.out.println(anotherUser);
}
}
요약
POJO는 Getter와 Setter로 구성된 가장 순수한 형태의 기본 클래스 로써
특별한 프레임워크나 라이브러리의 요구 사항을 따르지 않고, 순수한 Java 언어의 기능만을 사용하여 작성된 객체를 의미합니다.
POJO는 주로 데이터 모델을 표현하는 데 사용되며, 가독성과 유지보수성을 높이는 장점이 있습니다.
다양한 Java 애플리케이션에서 POJO를 사용하여 비즈니스 로직을 단순화하고, 재사용성을 높일 수 있습니다.
진정한 POJO란
토비의 스프링에서는 진정한 POJO를 아래와 같이 정의했다고 합니다.
그럼 특정 기술규약과 환경에 종속되지 않으면 모두 POJO라고 말할 수 있는가?
많은 개발자가 크게 오해하는 것 중의 하나가 바로 이것이다. . .(중략). .
진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고
필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
POJO 프로그래밍이 필요한 이유
- 특정 환경이나 기술에 종속적이지 않으면 재사용이 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
- 저수준 레벨의 기술과 환경에 종속적인 코드를 제거하여 코드를 간결해지며 디버깅하기에도 상대적으로 쉬워진다.
- 특정 기술이나 환경에 종속적이지 않기 때문에 테스트가 단순해진다.
- 객체지향적인 설계를 제한 없이 적용할 수 있다. (가장 중요한 이유)
POJO와 Spring의 관계
Spring은 POJO 프로그래밍을 지향하는 프레임워크이다.
최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해 Spring 프레임워크에서는 IoC/DI, AOP, PSA를 지원하고 있다.
연관된글 :
참조 :
https://dev-coco.tistory.com/82
https://velog.io/@galaxy/Spring%EC%9D%98-%EA%B8%B0%EB%B3%B8-%ED%8A%B9%EC%A7%95-POJO
'개발 > Java' 카테고리의 다른 글
[JAVA] 정적 팩토리 메서드(Static Factory Method) (0) | 2025.03.02 |
---|---|
[Java] Stream API - map과 flatMap (1) | 2024.06.06 |
[JAVA] DTO, VO, DAO, Entity 의 차이 (0) | 2023.05.25 |
[JAVA] Lombok 어노테이션 (0) | 2023.04.29 |
[Java] Interface (0) | 2023.04.01 |