Spring의 3대 요소
[TOC]
1. IoC(Inversion of Control)
1
2
3
4
5
6
7
8
9
class YatudyClass {
private YatudyRepository yatudyRepository = new YatudyRepository(){};
}
interface YatudyRepository{
}
위 코드를 “의존성을 자기(YatudyClass)가 만들어 사용한다”라고 한다 여기서 의존성을 만드는부분이 new YatudyRepository()
이다. 그에 반해 아래의 코드는 외부에서 yatudyRepository의 instance를 주입받는다. 참고로 위 코드는 DIP(Dependency Injection Principle)에 맞게 예시를 들었다. 이것을 제어 역전이고, 제어의 역전을 위한 방법인 DI(Dependency Injection)를 의존성 주입이라고 부른다. 참고로 스프링에서는 IoC컨테이너를 통해서 instance의 생성, 설정, 의존 관계를 맺고, 라이프사이클을 관리한다. 다시 말하지만, IoC와 DI는 다른 것이다.
1
2
3
4
5
6
7
8
9
class YatudyClass {
private YatudyRepository yatudyRepository;
public YatudyClass(YatudyRepository yatudyRepository) {
this.yatudyRepository = yatudyRepository;
}
}
그렇다면 IoC를 함으로써 얻는 장점은 무엇이 있을까?
- 여러가지 instances 사이의 변경이 용이하다.
- 프로그램의 모듈성이 높아진다. 즉, 모듈 간 의존성이 낮아진다.
- 프로그램의 수행과 구현을 분리시킬 수 있다.
2. AOP(Aspect Oriented Programming)
관점지향 프로그래밍이라고도 불립니다.
간단하게 하나의 비즈니스 로직을 기준으로 핵심, 부가적인 관점별로 묶어서 모듈화를 하는 것이다.
소스코드에서 같은 코드들이 반복되어서 사용되는 것을 흩어진 관심사(Crosscutting Concerns)라고 한다.
위와같은 흩어진 관심사를 Aspect로 모듈화하고, 핵심 비즈니스 로직에서 분리해서 재사용하겠다는 것이다.
3. PSA(Portable Service Abstraction)
추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것