DI(Dependency Injection)
- 의존성 주입이란 의미로, 객체를 직접 생성하는게 아닌 외부에서 생성 후 주입시켜 주는 방식을 말한다. 생성자 주입, 필드 주입, Setter 주입 3가지 방식이 있다. 의존성 주입을 통해 모듈간 결합도를 낮출 수 있다.
IoC(Inversion of Control)
- 제어의 역전이란 의미로, 메서드나 객체의 호출작업을 개발자가 결정하는 것이 아닌, 외부에서 결정되는 것이다. 객체의 생명주기를 IoC 컨테이너가 대신 관리해준다. IoC는 가독성 향상, 코드 중복 방지 그리고 유지 보수를 편하게 해준다.
AOP (Aspect Oriented Programming)
- 관점 지향 프로그래밍, 횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍이다. 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 개발자의 반복 작업을 줄이고 핵심 기능 개발에만 집중할 수 있도록 해준다. 핵심 기능의 코드를 수정하지 않고 공통 기능을 추가하는 것.
- Target Object: 부가 기능을 부여할 대상
- Aspect: AOP의 기본 모듈. 특정 관심사를 나타내는 모듈화 단위. Advice와 Pointcut을 포함함.
- Advice: 타깃에게 제공할 부가 기능을 담은 모듈.
- Join point: Advice가 적용될 수 있는 위치
- Pointcut: Advice에 적용할 Join point를 선별하는 작업 또는 모듈
- @Aspect, @Pointcut, @Around, @Before, @AfterReturning
PSA (Portable Service Abstraction)
- 여러 종류의 서비스에 대해 일관된 인터페이스를 제공하는 서비스 추상화 개념이다. 대표적인 예로 Spring에서 JDBC, JPA, Hibernate와 같은 데이터 액세스 기술을 추상화하여 개발자가 일관된 방식으로 데이터베이스에 접근할 수 있도록 지원합니다. 이를 통해 요구 사항 변경에 유연하게 대처 가능하도록 하여 확장성과 유지보수성을 향상시킵니다.
POJO (Plain Old JAVA Object)
- 특정 기술에 종속되지 않는 순수한 자바 객체. 자바의 객체지향 프로그래밍 원칙 적용이 쉬우며, 유연성과 테스트 용이성을 제공한다.