8.3) POJO 프로그래밍
스프링의 핵심: POJO
- 스프링의 가장 강력한 특징과 목표는
반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공하는 것이다.- 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와,
POJO가 어떻게 관계를 맺고 동작하는지를 정의해놓은 설계정보로 구분된다. - 그리고 유연하게 확장 가능한 오브젝트를 만들어두고
그 관계는 외부에서 다이내믹하게 설정해주는 DI의 개념을 애플리케이션 전반에 걸쳐 적용한다. - 스프링의 기술인 IoC/DI, AOP, PSA는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능기술이라고 불린다.
- 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와,

POJO란 무엇인가?
- 스프링 애플리케이션 개발의 핵심인 POJO를 좀 더 자세히 알아보자.
- POJO는 Plain Old Java Object의 첫 글자를 따서 만든 약자다.
- POJO는 EJB처럼 복잡하고 제한이 많은 기술을 사용하는 것이 아닌,
자바의 단순한 오브젝트를 이용해 애플리케이션의 비즈니스 로직을 구현하는 것이다. - 그러므로 간단한 자바 오브젝트를 사용하는 것은 POJO 방식의 기술을 사용하는 것이다.
POJO의 조건
- POJO는 다음의 세 가지 조건을 충족해야 한다.
- POJO는 자바 언어와 꼭 필요한 API 외에는 특정 규약에 종속되지 않아야 한다.
특정 규약을 따라 만들게 하는 경우에는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구한다.
그럴 경우 자바의 단일 상속 제한 때문에 더 이상 해당 클래스에 객체지향적인 설계 기법을 적용하기가 어려워진다.
또한 규약이 적용된 환경에 종속적이 되기 때문에 다른 환경으로 이전이 힘들다.
이처럼 별다른 가치를 주지도 못하는 규약 따위에 종속되지 않아야 하고,
객체지향 설계의 자유로운 적용이 가능한 오브젝트여야만 POJO라고 불릴 수 있다. - POJO는 특정 환경에 종속되지 않아야 한다.
어떤 경우는 특정 벤더의 서버나 특정 기업의 프레임워크 안에서만 동작 가능한 코드로 작성되기도 한다.
하지만 이런 식으로 순수한 애플리케이션 로직을 담고 있는 오브젝트 코드가
특정 환경에 종속되게 만드는 경우라면 POJO라고 할 수 없더,
특히 비즈니스 로직을 담고 있는 POJO 클래스는 웹이라는 환경정보나
웹 기술을 담고 있는 클래스나 인터페이스를 사용해서는 안 된다.
요즘은 소스코드에 직접 메타정보를 추가해주는 애노테이션을 많이 사용하는데
이 경우 애노테이션이나 엘리먼트 값에 특정 기술과 환경에 종속적인 정보를 담고 있다면
그때는 POJO로서의 가치를 잃어버린다고 할 수 있다. - 또한 객체지향적인 자바 언어의 기본에 충실하게 만들어져야 한다.
책임과 역할이 각기 다른 코드를 한 클래스에 몰아넣어 덩치 큰 만능 클래스로 만드는 경우,
재사용이 불가능할 정도로 다른 레이어와 영역의 코드와 강한 결합을 가지고 만들어지는 경우,
상속과 다형성의 적용으로 처리하지 않고 긴 메소드로 작성해 놓은 경우 등
이것들을 객체지향적인 자바 오브젝트라고 할 수 없다.
- POJO는 자바 언어와 꼭 필요한 API 외에는 특정 규약에 종속되지 않아야 한다.
- 진정한 POJO란 객체지향적인 원리를 충실하면서,
환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
그런 POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 할 수 있다.
POJO의 장점
- POJO가 될 수 있는 조건이 그대로 POJO의 장점이 된다.
- 특정한 기술과 환경에 종속되지 않는 오브젝트는 그만큼 깔끔한 코드가 될 수 있다.
- POJO로 개발된 코드는 환경의 제약이 없으므로 매우 유연한 방식으로 원하는 레벨의 자동화된 테스트에 매우 유리하다.
- 객체지향적인 설계를 자유롭게 적용할 수 있다는 것도 큰 장점이다.
자바와 객체지향 프로그래밍, 모델링과 도메인 모델,
재활용 가능한 설계 모델인 디자인 패턴은 POJO가 아니고는 적용하기 힘들다.
POJO 프레임워크
- POJO 프로그래밍이 가능하도록 기술적인 기반을 제공하는 프레임워크를 POJO 프레임워크라고 한다.
- 스프링은 POJO를 이용한 엔터프라이즈 애플리케이션 개발을 목적으로 하는 프레임워크이다.
엔터프라이즈 애플리케이션 개발의 모든 영역와 계층에서 POJO 방식의 구현이 가능하게 한다. - 하이버네이트는 주로 DB 이용 기술에 POJO를 적용하는 프레임워크이다.
- 스프링은 POJO를 이용한 엔터프라이즈 애플리케이션 개발을 목적으로 하는 프레임워크이다.
- 스프링을 이용하면 POJO 프로그래밍의 장점을 그대로 살려서
엔터프라이즈 애플리케이션의 핵심 로직을 객체지향적인 POJO를 기반으로 깔끔하게 구현하고,
동시에 엔터프라이즈 환경의 각종 서비스와 기술적인 필요를 POJO 방식으로 만들어진 코드에 적용할 수 있다.- 스프링은 비즈니스 로직의 복잡함과 엔터프라이즈 기술의 복잡함을 분리해서 구성할 수 있게 도와준다.
- 그리고 기술영역에만 관여하고 비즈니스 로직을 담당하는 POJO에서는 모습을 감춘다.
- 즉, 자신을 직접 노출하지 않으면서 애플리케이션을 POJO로 쉽게 개발할 수 있게 지원해준다.
- 이를 통해 개발자들이 복잡한 엔터프라이즈 기술보다는 객체지향적인 설계와 개발의 원리에 좀 더 집중할 수 있도록 한다.

'Java-Spring > 토비의 스프링 3.1' 카테고리의 다른 글
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 프로젝트 시작하기 (0) (0) | 2024.04.22 |
---|---|
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (4) (0) | 2024.04.20 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (2) (0) | 2024.04.17 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (1) (0) | 2024.04.16 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (0) (0) | 2024.04.16 |
8.3) POJO 프로그래밍
스프링의 핵심: POJO
- 스프링의 가장 강력한 특징과 목표는
반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공하는 것이다.- 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와,
POJO가 어떻게 관계를 맺고 동작하는지를 정의해놓은 설계정보로 구분된다. - 그리고 유연하게 확장 가능한 오브젝트를 만들어두고
그 관계는 외부에서 다이내믹하게 설정해주는 DI의 개념을 애플리케이션 전반에 걸쳐 적용한다. - 스프링의 기술인 IoC/DI, AOP, PSA는 애플리케이션을 POJO로 개발할 수 있게 해주는 가능기술이라고 불린다.
- 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와,

POJO란 무엇인가?
- 스프링 애플리케이션 개발의 핵심인 POJO를 좀 더 자세히 알아보자.
- POJO는 Plain Old Java Object의 첫 글자를 따서 만든 약자다.
- POJO는 EJB처럼 복잡하고 제한이 많은 기술을 사용하는 것이 아닌,
자바의 단순한 오브젝트를 이용해 애플리케이션의 비즈니스 로직을 구현하는 것이다. - 그러므로 간단한 자바 오브젝트를 사용하는 것은 POJO 방식의 기술을 사용하는 것이다.
POJO의 조건
- POJO는 다음의 세 가지 조건을 충족해야 한다.
- POJO는 자바 언어와 꼭 필요한 API 외에는 특정 규약에 종속되지 않아야 한다.
특정 규약을 따라 만들게 하는 경우에는 대부분 규약에서 제시하는 특정 클래스를 상속하도록 요구한다.
그럴 경우 자바의 단일 상속 제한 때문에 더 이상 해당 클래스에 객체지향적인 설계 기법을 적용하기가 어려워진다.
또한 규약이 적용된 환경에 종속적이 되기 때문에 다른 환경으로 이전이 힘들다.
이처럼 별다른 가치를 주지도 못하는 규약 따위에 종속되지 않아야 하고,
객체지향 설계의 자유로운 적용이 가능한 오브젝트여야만 POJO라고 불릴 수 있다. - POJO는 특정 환경에 종속되지 않아야 한다.
어떤 경우는 특정 벤더의 서버나 특정 기업의 프레임워크 안에서만 동작 가능한 코드로 작성되기도 한다.
하지만 이런 식으로 순수한 애플리케이션 로직을 담고 있는 오브젝트 코드가
특정 환경에 종속되게 만드는 경우라면 POJO라고 할 수 없더,
특히 비즈니스 로직을 담고 있는 POJO 클래스는 웹이라는 환경정보나
웹 기술을 담고 있는 클래스나 인터페이스를 사용해서는 안 된다.
요즘은 소스코드에 직접 메타정보를 추가해주는 애노테이션을 많이 사용하는데
이 경우 애노테이션이나 엘리먼트 값에 특정 기술과 환경에 종속적인 정보를 담고 있다면
그때는 POJO로서의 가치를 잃어버린다고 할 수 있다. - 또한 객체지향적인 자바 언어의 기본에 충실하게 만들어져야 한다.
책임과 역할이 각기 다른 코드를 한 클래스에 몰아넣어 덩치 큰 만능 클래스로 만드는 경우,
재사용이 불가능할 정도로 다른 레이어와 영역의 코드와 강한 결합을 가지고 만들어지는 경우,
상속과 다형성의 적용으로 처리하지 않고 긴 메소드로 작성해 놓은 경우 등
이것들을 객체지향적인 자바 오브젝트라고 할 수 없다.
- POJO는 자바 언어와 꼭 필요한 API 외에는 특정 규약에 종속되지 않아야 한다.
- 진정한 POJO란 객체지향적인 원리를 충실하면서,
환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.
그런 POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 할 수 있다.
POJO의 장점
- POJO가 될 수 있는 조건이 그대로 POJO의 장점이 된다.
- 특정한 기술과 환경에 종속되지 않는 오브젝트는 그만큼 깔끔한 코드가 될 수 있다.
- POJO로 개발된 코드는 환경의 제약이 없으므로 매우 유연한 방식으로 원하는 레벨의 자동화된 테스트에 매우 유리하다.
- 객체지향적인 설계를 자유롭게 적용할 수 있다는 것도 큰 장점이다.
자바와 객체지향 프로그래밍, 모델링과 도메인 모델,
재활용 가능한 설계 모델인 디자인 패턴은 POJO가 아니고는 적용하기 힘들다.
POJO 프레임워크
- POJO 프로그래밍이 가능하도록 기술적인 기반을 제공하는 프레임워크를 POJO 프레임워크라고 한다.
- 스프링은 POJO를 이용한 엔터프라이즈 애플리케이션 개발을 목적으로 하는 프레임워크이다.
엔터프라이즈 애플리케이션 개발의 모든 영역와 계층에서 POJO 방식의 구현이 가능하게 한다. - 하이버네이트는 주로 DB 이용 기술에 POJO를 적용하는 프레임워크이다.
- 스프링은 POJO를 이용한 엔터프라이즈 애플리케이션 개발을 목적으로 하는 프레임워크이다.
- 스프링을 이용하면 POJO 프로그래밍의 장점을 그대로 살려서
엔터프라이즈 애플리케이션의 핵심 로직을 객체지향적인 POJO를 기반으로 깔끔하게 구현하고,
동시에 엔터프라이즈 환경의 각종 서비스와 기술적인 필요를 POJO 방식으로 만들어진 코드에 적용할 수 있다.- 스프링은 비즈니스 로직의 복잡함과 엔터프라이즈 기술의 복잡함을 분리해서 구성할 수 있게 도와준다.
- 그리고 기술영역에만 관여하고 비즈니스 로직을 담당하는 POJO에서는 모습을 감춘다.
- 즉, 자신을 직접 노출하지 않으면서 애플리케이션을 POJO로 쉽게 개발할 수 있게 지원해준다.
- 이를 통해 개발자들이 복잡한 엔터프라이즈 기술보다는 객체지향적인 설계와 개발의 원리에 좀 더 집중할 수 있도록 한다.

'Java-Spring > 토비의 스프링 3.1' 카테고리의 다른 글
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링 프로젝트 시작하기 (0) (0) | 2024.04.22 |
---|---|
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (4) (0) | 2024.04.20 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (2) (0) | 2024.04.17 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (1) (0) | 2024.04.16 |
[토비의 스프링 3.1] Vol.1 스프링의 이해와 원리 - 스프링이란 무엇인가? (0) (0) | 2024.04.16 |