제어의역전 (IoC), 의존성 주입(DI), 관점지향 프로그래밍(AOP),이식가능한 서비스 추상화(PAS)에 대한 설명
제어의 역전과 의존성 주입
IoC: Inversion of Control (제어의 역전)
- JAVA
1. 일반적인 자바 개발에서 객체를 사용하기 위해 객체를 선언 하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용
2. 객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어 하는 구조
3. new 키워드로 NomalService 객체 생성
private NomalService nomalService = new NomalSerVice();
- Spring
1. 개발자가 직접 객체를 생성하지 않고 객체의 생명 주기 관리를 외부로 위임
2. 외부 -> Spring Container , IoC Container 부름
3. 객체의 관리를 컨테이너에 맡겨 제어권을 넘어간 것을 제어의 역전이라고 함
4. new 라는 키워드 사용없이 어디선가 받아온 객체를 b에 할당
private NomalService nomalService;
-> 스프링은 스프링 컨테이너가 객체를 관리, 제공하는 역할을 한다.
IoC를 통한 DI, AOP
개발자는 객체의 제어권을 컨테이너로 넘기고 객체의 생명 주기 관리 등의 복잡한 요소들을 신경 쓰지 않고, 비즈니스 로직에만 집중할 수 있게 된다.
DI : Dependency Injection (의존성 주입)
- 제어의 역전을 구현하기 위해 사용하는 방법
- 어떤 클래스가 다른 클래스에 의존한다
스프링 컨테이너
- 빈을 생성하고 관리
- 빈이 생성되고 소멸되기까지의 생명주기를 스프링 컨테이너가 관리
@Autowired
- 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할
BEAN(빈)
@Component
@Service
- @Component랑 동일한 역할을 한다 서비스 영역에서 명시성을 부여
AOP: Aspect-Oriented Programming (관점 지향 프로그래밍)
- 프로그래밍에 대한 관심을 핵심 관점, 부가관점으로 나누어서 관심 기준으로 모듈화
- 프로그램의 변경과 확장에도 유연하게 대응 가능
PSA (Portable Service Abstraction) 이식 가능한 서비스 추상화
- 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스
- 어느 기술을 사용하던 일관된 방식으로 처리하는 것
- ex) 스프링에서 데이터베이스에 접근하는 기술
- JPA, Mybatis, JDBC