POJO (Plain Old Java Object)
- Java나 Java의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 함
- 특정 환경에 종속적이지 않아야 함
- POJO 프로그래밍이 필요한 이유
- 재사용과 확장이 가능한 유연한 코드 작성 가능
- 코드가 깔끔해지기 때문에 디버깅이 상대적으로 쉬움
- 테스트의 단순화
- 객체지향적인 설계를 제한없이 적용 가능
- POJO와 Spring의 관계
- Spring은 POJO 프로그래밍을 지향하는 Framwork
- POJO 프로그래밍 코드를 작성하기 위해 Spring에서 IoC/DI, AOP, PSA 기술 지원
IoC (Inversion of Control) / DI (Dependency Injection)
-
Ioc : 애플리케이션 흐름의 주도권이 사용자에게 있지 않고, Framwork나 서블릿 컨테이너 등 외부에 있는 것
-
DI : IoC 개념을 조금 구체화 시킨 것으로 객체 간의 관계를 느슨하게 해줌
-
의존 관계 성립 : 클래스 내부에서 다른 클래스의 객체를 생성
-
의존성 주입 : 클래스 내부에서 new
를 사용해 참조할 클래스의 객체를 직접 생성하지 않고, 생성자 등을 통해 외부에서 다른 클래스의 객체를 전달 받음
-
Spring에서 애플리케이션 코드에서 이뤄지는 DI를 대신 해줌
느슨한 결합?
어떤 클래스가 인터페이스처럼 일반화 된 구성 요소에 의존하고 있는 경우로, 요구 사항의 변경에 유연한 대처 가능
강한 결합?
new
를 통해 객체를 생성하는 경우
AOP (Aspect Oriented Programming)
애플리케이션에 필요한 기능 중, 공통적으로 적용되는 기능과 관련
- AOP가 필요한 이유
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 구현
- 코드의 재사용
애플리케이션 전반에 걸쳐 적용되는 공통 기능?
- 트랜잭션, 로깅, 보안, 트레이싱, 모니터링 등
PSA (Portable Service Abstraction)
추상화 된 상위 클래스를 일관되게 바라보며, 하위 클래스의 기능을 사용하는 것 (일관된 서비스 추상화)
- PSA가 필요한 이유
- 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써, 애플리케이션의 요구 사항 변경에 유연한 대처 가능
- Spring에서 PSA가 적용된 분야로는 트랜잭션, 메일, Spring Data 서비스 등이 있음