POJO 란?

hyewon·2023년 8월 15일

위는 Spring의 핵심 개념을 한번에 보여주는 대표적인 삼각형 이미지 이다.
Spring은 POJO 프로그래밍을 지향하는 프레임워크이다.
POJO는 IoC/DI, AOP, PSA를 통해서 달성할 수 있다는 것을 의미한다.


POJO 란?

Plain Old Java Object 의 약자로,
Java로 생성하는 순수한 객체를 뜻한다.

POJO(Plain Old Java Object)
객체지향적인 원리에 충실하며 특별한 제한에 종속되지 않고,
클래스 패스를 필요로 하지 않는 일반적인 Java Object 로
주요 Java 오브젝트 모델, 컨벤션 또는 프레임워크를 따르지 않는다.


POJO 의 등장배경

Java EE 등의 중량 프레임워크들을 사용하게 되면서
특정 ‘기술’과 환경에 종속되어 의존하게 된 자바 코드는 가독성이 떨어져 유지보수가 어렵고 확장성이 매우 떨어지는 단점이 있었다.

이는 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리는 것 이므로,
POJO라는 개념이 등장하게 되었다.

POJO 의 특징

하나의 오브젝트 안에 상태(State)와 행위(Behavior)를 모두 가지고 있다.
즉, 인스턴스 변수와 로직을 가진 메소드를 가지고 있는 것이다.


POJO 프로그래밍

POJO를 이용하여 프로그래밍 코드를 작성하는 것 이다.
하지만 순수 자바 객체만을 사용한다고 POJO 프로그래밍이 되는 것이 아니다.
기본적인 조건을 지키고 있어야 한다.


POJO 프로그래밍 기본조건

-- 조건 1. Java나 Java의 스펙에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.

POJO 객체 예제코드

아래의 코드는 getter와 setter만 가지고 있는 POJO 코드의 예제이다.

public class PojoStudy {
	private String name ;
    private int age ;

	public String getName() {
    	return name;
    }
    
    public String getAge() {
    	return age;
    }
    
    public void setName(String name) {
    	this.name = name;
    }
    
    public void setAge(int age) {
    	this.age = age;
    }  
}

위의 예제코드는
Java 에서 제공하는 기능만 사용하여 작성한 클래스이며, Java 언어 이외의 특정한 기술에 종속되어 있지 않은 순수한 객체이기 때문에 POJO라고 부를 수 있다.

종속적인 객체 예제코드

public class MessageForm extends ActionForm {
    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

public class MessageAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {

        MessageForm messageForm = (MessageForm) form;
        messageForm .setMessage("Hello World");

        return mapping.findForward("success");
    }
}

위의 코드는 Struts라는 기술의 클래스를 상속받아 작성된 코드이다.

이러한 방식으로 기술을 상속받아 코드를 작성하게 되면, 애플리케이션의 요구사항이 변경되어 다른 기술로 변경해야 할 때 해당 기술의 클래스를 명시적으로 사용했던 부분들을 모두 제거하여 수정해야 한다.

또한, Java는 다중 상속을 지원하지 않기 때문에 extends 키워드를 통해 상속을 받게 되면 상위 클래스를 상속받아 하위 클래스를 확장하는 객체지향 설계 기법을 적용하기 어려워진다.

-- 조건 2. 특정 환경에 종속적이지 않아야 한다.

특정 프레임워크에서만 동작이 가능해서는 안되며,

비즈니스 로직을 담고 있는 POJO 클래스는 웹 기반의 환경 정보나 웹 기술을 담고 있는 클래스 또는 인터페이스를 사용하면 안된다.

웹 컨트롤러와 연결하여 사용하더라도, 직접적으로 사용 환경을 웹으로 제한하거나 웹에서만 동작하는 API를 직접 사용하지 말아야 한다.

이러한 이유는 웹 이외의 클라이언트는 해당 기능을 요청할 수 없기 때문이다.

따라서 비즈니스 로직을 담는 코드에 HTTPServletRequest, HttpSession, 캐시 등에 관련된 API를 사용하게 된다면 POJO라 할 수 없다.

POJO 프로그래밍이 필요한 이유

  • 특정 환경이나 기술에 종속되지 않아 객체지향 설계가 가능하다.
  • 재사용이 가능하고, 확장 가능한 유연한 코드를 작성할 수 있다.
  • 특정한 기술과 환경에 종속적이지 않아 테스트가 단순해진다.
  • 특정 규약에 종속되지 않으므로 저수준의 코드와 비즈니스 코드를 구분하여 간결한 코드 작성이 가능하다.

0개의 댓글