맨 처음에 스프링의 가장 큰 특징을 네 가지를 소개했습니다. 이번 포스트에서는 마지막 네 번째 큰 특징인 POJO (Plain Old Java Object)에 대해 알아보려고 합니다.
POJO (Plain Old Java Object) 뜻 그래도 해석하면 '순수하고 오래된 자바 객체'로 해석됩니다. 단어의 해석 그대로 프레임워크나 라이브러리(= 상속과 구현)에 종속되지 않는 순수한 자바 언어 사양만으로 구현된 자바 객체를 의미합니다.
이 객체를 독립적으로 두고 순수한 자바만 있는 환경에서 실행했을 때 무리 없이 동작해야합니다. 그렇기에 다음과 같은 조건을 충족해야 POJO라고 합니다.
인터페이스 구현 X
인터페이스 implements를 강요하지 않아야합니다.
클래스 상속 X
프레임워크 등에서 제공되는 기본 클래스를 상속하지 않아야합니다.
어노테이션 의존 X
비즈니스 로직만을 담고 있어야합니다.
POJO를 사용하는 이유는 다음과 같습니다.
유지보수가 편리
프레임워크, 라이브러리 등이 변경되어도 비즈니스 로직을 재사용할 수 있습니다. 또한 POJO의 조건을 충족하다보면 코드 자체도 간결해져 유지보수성이 올라갑니다.
테스트 용이
특정한 환경을 마련하지 않아도 간단하게 테스트 코드를 작성하고 테스트할 수 있게 됩니다.
객체지향 설계
순수한 자바 객체 설계를 통해 프레임워크와 분리된 객체지향적 설계가 가능해집니다.
스프링 프레임워크는 개발자가 작성한 POJO를 스프링 컨테이너에 담아 관리(IoC) 어노테이션(@Controller, @Service 등)을 통해 부가 기능들을 외부에서 주입해주는 방식을 사용합니다. 이로인해 개발자는 POJO를 작성하고 유지할 수 있게 해주면서 부가 기능들은 개발자가 신경을 덜쓰고 이용할 수 있게 해주므로 편리하게 코드를 작성할 수 있게 됩니다.
그래서 다음과 같은 서비스 클래스(POJO)를 선언하고 바로 사용할 수 있게 됩니다.
public class MyService {
public void runMyServiceCode() {
//비즈니스 로직 예시
System.out.print("My service is running...")
}
}
위 클래스(객체)는 어떠한 외부 프레임워크/라이브러리 코드, 상속/구현이 포함되지 않았습니다. 이러한 객체에 다음과 같이 스프링에서 제공하는 어노테이션 하나만 붙여주면 스프링이 이 객체를 생성/관리 해주게 됩니다.
@Service //스프링의 어노테이션
public class MyService {
public void runMyServiceCode() {
//비즈니스 로직 예시
System.out.print("My service is running...")
}
}
단순히 스프링이 제공하는 어노테이션을 붙이기만 하면 POJO가 스프링의 서비스구나! 인식하고 필요한 등록/설정/생성/관리를 자동으로 해주게 됩니다. 당연히 @Service라는 어노테이션을 제거하면 이 클래스는 순수한 자바 클래스로 동작하게 됩니다.