
Spring 삼각형
POJO(Plain Old Java Object)
Java로 생성하는 순수한 객체
- Java나 Java의 스펙(사양)에 정의된 것 이외에는 다른 기술이나 규약에 얽매이지 않아야 한다.
- 특정 환경에 종속적이지 않아야 한다.
왜??
- 종속적이지 않아야 재사용이 가능하고, 확장이 유연한 코드
- 저수준 레벨의 기술과 환경에 종속적인 코드를 애플리케이션 코드에서 제거함으로써 코드가 깔끔
- 깔끔한 코드덕에 디버깅도 상대적으로 쉬움
- 종속적이지 않아 테스트도 단순
- 객체지향적인 설계를 제한 없이 적용 가능 (가장 중요한 이유)
롬복 등의 외부 라이브러리를 사용하면 POJO 원칙을 위배한다고 볼 수 있나요?
POJO 를 유지한다고 말할 수 있다!
IoC(Inversion of Control)
애플리케이션 흐름의 주도권이 뒤바뀐 것,
Spring에서는 애플리케이션 흐름의 주도권이 뒤바뀌어 Spring 이 갖는다
DI (Dependency Injection) : 의존성 주입
1. DI 가 뭐야?
여기서 말하는 의존성은 "객체간의 의존성"
"의존성 주입" = 외부에서 객체를 주입한다.
💻 예시
A 클래스가 B 클래스의 메서드를 사용하기 위해,
- B의 객체를 new 키워드로 직접 생성 (X)
- A의 생성자로 B의 객체를 전달받기 (O)
즉, 클래스의 생성자 파라미터로 객체를 전달받는 코드가 있다면 '의존성 주입' 이 이루어지는구나!
2. DI 왜해?
3. DI 어떻게해?
4. DI 누가해?
AOP (Aspect Oriented Programming)
관심 지향 프로그래밍
애플리케이션에 전반에 걸쳐 적용되는 공통 기능(트랜잭션, 로깅, 보안, 트레이싱, 모니터링) 등을 비즈니스 로직에서 깔끔하게 분리하여 재사용 가능한 모듈로 사용하는 것
- 핵심 관심 사항(Core concern) : 비즈니스 로직 즉, 애플리케이션의 주목적 달성을 위한 핵심 로직
- 공통 관심 사항(Cross-cutting concern): 애플리케이션 전반에 공통적으로 적용되는 부가적인 것

장점
- 공통 코드를 분리하여 코드 간결화, 유지보수 용이, 재사용 용이
- 객체 지향 설계 원칙에 맞는 코드 구현
PSA (Portable Service Abstraction)
"일관된 서비스 추상화"
서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것
추상화(Abstraction)
객체지향 프로그래밍 세계에서는 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것
JAVA 에서는 대표적으로 추상클래스와 인터페이스
