디자인패턴, OOP

POJO (Plain Old Java Object)

TedDev 2025. 1. 12. 17:44
728x90

POJO는 "Plain Old Java Object"의 약자로 특별한 제한이나 규약 없이 순수하게 작성된 Java 객체를 의미한다. 이는 특정 라이브러리, 프레임워크,또는 기술에 종속되지 않고 간단한 구조로 설계된 객체이다.

 

POJO의 특징

  1. 프레임워크 독립성
    • 특정 프레임워크나 라이브러리(예: Spring, Hibernate 등)에 종속되지 않는다.
    • POJO는 외부 종속성을 가지지 않으며 표준 Java 문법으로만 작성된다.
  2. 심플한 설계
    • 간단한 필드(속성)와 getter/setter 메서드, 필요에 따라 생성자 및 기타 유틸리티 메서드로 구성된다.
    • 복잡한 기능을 포함하지 않으며 직관적이다.
  3. 명시적인 동작 없음
    • POJO는 일반적으로 동작(메서드)을 최소화하고 데이터 저장과 전달을 위한 객체로 사용된다.
  4. 객체 지향 원칙 준수
    • 캡슐화, 상속, 다형성과 같은 객체 지향 설계 원칙을 따르지만 최소한의 설계로 단순함을 유지한다.

 

POJO의 목적

  • 데이터 전달 객체(DTO) : 주로 데이터를 저장하거나 전달하는 목적으로 사용된다.
  • 프레임워크 비종속성 유지 : POJO를 사용하면 비즈니스 로직이나 데이터 모델이 특정 프레임워크에 종속되지 않으므로 시스템이 더 유연하고 테스트 가능해진다.
  • 코드의 단순화 및 표준화 : POJO를 사용하면 코드가 간결하고 유지보수하기 쉬워진다.

 

POJO의 장점

  1. 유지보수성
    • 간단한 구조로 작성되므로 읽기 쉽고 유지보수하기 용이하다.
  2. 테스트 용이성
    • 특정 프레임워크에 의존하지 않으므로 독립적으로 단위 테스트를 작성할 수 있다.
  3. 재사용성
    • 다른 프로젝트나 모듈에서 재사용하기 쉬운 객체이다.
  4. 프레임워크와의 호환성
    • 대부분의 프레임워크(Spring, Hibernate 등)에서 POJO를 지원하며 이러한 프레임워크와 쉽게 통합할 수 있다.

 

POJO의 단점

  1. 제약 없음으로 인한 유연성 저하
    • POJO는 순수한 Java 객체로 별도의 제약이나 규칙이 없어 오히려 시스템 설계가 비효율적일 수 있다.
  2. 추가 작업 필요
    • 특정 프레임워크를 활용하려면 POJO를 기반으로 추가적인 설정(예: 어노테이션, XML)을 해야 할 수 있다.

 

POJO 예제

간단한 POJO

public class User {
    private int id;
    private String name;

    // 기본 생성자
    public User() {}

    // 매개변수 생성자
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    // Getter and Setter
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "'}";
    }
}

POJO와 프레임워크의 결합 (Spring 예시)

@Component
public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User getUserById(int id) {
        return userRepository.findById(id);
    }
}

@Repository
public class UserRepository {
    public User findById(int id) {
        return new User(id, "John Doe");
    }
}
  • 여기서 User 클래스는 POJO로 설계되었으며 Spring 프레임워크의 컴포넌트인 UserService와 UserRepository에서 사용되고 있다.

 

POJO의 활용

  1. 데이터 모델
    • 데이터베이스 테이블과 매핑하여 ORM(Object-Relational Mapping)에서 엔티티(Entity)로 사용된다.
  2. DTO (Data Transfer Object)
    • 계층 간 데이터 전달을 위해 사용된다.
  3. 설정 객체
    • 시스템 구성 설정 정보(예: 애플리케이션 설정, 프로필 정보 등)를 저장한다.

 

요약

POJO는 Java에서 가장 간단하고 표준적인 객체 설계 방식으로 특정 프레임워크나 기술에 종속되지 않은 순수한 Java 객체이다.
간단하고 유연한 구조로 인해 유지보수성과 테스트 용이성이 높아 소프트웨어 설계의 기초적인 구성 요소로 사용된다.
POJO는 Spring, Hibernate와 같은 프레임워크와 쉽게 통합되어 객체 중심의 설계 및 개발을 지원한다.

반응형