Spring

[Spring] Spring POJO 설명

오잎 클로버 2022. 2. 18. 11:30
728x90

Spring 본질이자, Spring 관련 글들을 읽으면 왠만해선 항상 나오는 POJO...이를 설명하고자 포스팅했습니다.

 

POJO란?

Plain Old Java Object의 약자로 단순한 자바 오브젝트라는 뜻입니다.

객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지않고 필요에 따라 재활용될 수 있는 방식으로 설계된

오브젝트를 뜻합니다. 그러한 POJO에 어플리케이션의 핵심로직과 기능을 담아 설계하고 개발하는 방법을

POJO 프로그래밍이라고 합니다.

 

무엇을 POJO라고 부를 수 있나요?

1. 특정 규약에 종속되지 않는다.

Java와 꼭 필요한 API외에는 종속되지 말아야합니다. EJB2와 같이 특정 규약을 따라 만들게 하는 경우는 대부분

규약에서 제시하는 특정 클래스를 상속하도록 유도하고 있습니다. 그럴 경우 Java의 단일 상속 제한 때문에

더 이상 해당 클래스에 객체 지향적인 설계 기법을 적용하기 어려워지기 때문입니다.

 

2. 특정 환경에 종속되지 않는다.

특정 기업의 프레임워크나 서버에서만 적용가능한 코드라면 POJO라고 할 수 없습니다.

POJO는 환경에 독립적이어야합니다. 특히 비즈니스 로직을 담고 있는 POJO 클래스는 웹이라는 환경 정보나 웹 기술을

담고 있는 클래스나 인터페이스를 사용해서는 안됩니다. 설령 나중에 웹 컨트롤러와 연결을 하여 사용될 것이

분명하더라도 직접적으로 웹이라는 환경으로 제한해버리는 오브젝트나 API에 의존해서는 안됩니다.

그렇게 되면 웹 외의 클라이언트가 사용하지 못하기 때문입니다.

기술적인 내용을 담은 웹 정보가 비즈니스 로직과 얽혀있으니 이해하기도 어렵다.

때문에 비지니스 로직을 담은 코드에 HTTPServletRequest, HttpSession, 캐시에 관련된 API가 등장한다면 진정한 POJO라고 할 수 없습니다.

 

3. 객체 지향적인 원리에 충실해야한다.

POJO는 객체지향적인 자바언어의 기본에 충실하게 만들어져야합니다.

자바 언어 문법을 사용했다고해서 자동적으로 객체지향 프로그래밍과 객체지향 설계가 적용됬다고 볼 수는 없습니다.

책임과 역할이 각기 다른 코드를 한 클래스에 몰아넣어 덩치 큰 만능 클래스를 만들고

상속과 다형성의 적용이 아닌 if/switch문으로 가득 설계된 오브젝트라면 POJO라고 부르기 힘듭니다.

if/switch가 가득한 코드의 일부입니다. 위 코드는 POJO가 될 수 없습니다.

 

POJO의 장점은?

먼저, 코드가 굉장히 깔끔해집니다. 그리고 테스트가 간편해집니다. 

객체 지향적인 원리에 충실하기 때문에 객체 지향적인 설계를 자유롭게 적용할 수 있습니다.

(객체지향 프로그램은 엔터프라이즈 시스템에서와 같이 복잡한 도메인을 가진 곳에서 가장 효과적으로 사용될 수 있습니다.)

 

Spring과 POJO의 연관성은?

Spring의 주요 기술인 IOC/DI, AOP, PSA는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능 기술입니다.

그 중 DI는 유연하게 확장가능한 오브젝트를 만들어두고 그관계는 외부에서 설정해줍니다.

 

 

이상입니다.