스프링의 모든 기능의 기반은 제어의 역전(IOC)과 의존성 주입(DI)에 있다.
제어의 역전. 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것.
지금까지 자바에서 객체를 생성할 때 객체가 필요한 곳에서 직접 생성을 해왔다. 예를 들면, 클래스B 객체를 사용하려면 클래스A에서 아래와 같이 객체를 직접 생성한다.
public class A {
b = new B();
}
스프링 컨테이너가 객체를 관리하는 방식에서는
public class A {
private B b;
}
위와 같이 코드에서 코드를 직접 생성하지 않고, 어디선가 받아온 객체를 b에 할당하는 방식으로 사용된다.
의존성 주입. 제어의 역전(IoC)을 구현하기 위해 사용하는 방법.
public class A {
@AutoWired
B b;
}
- @AutoWired
: 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할.
- 빈: 스프링 컨테이너에서 관리하는 객체
@AutoWired
같은 애너테이션을 사용해 빈을 주입받을 수 있도록 DI 지원. 스프링 컨테어니가 생성하고 관리하는 객체. 바로 위의 예제 코드에서 B가 바로 빈!
빈으로 등록하는 방법을 여러 가지가 있다. (XML 파일 설정, 애너테이션 추가..등등)
ex)
@Component 애너테이션을 붙이면 MyBean 클래스가 빈으로 등록되고, 이후 스프링 컨테이너에서 이 클래스를 관리함.
Aspect Oriented Programming, 관점 지향 프로그래밍.
쉽게 말하자면,
프로그래밍에 대한 관심을 핵심관점
과 부가관점
으로 나누어서 모듈화 하는 것 (이것도 어려운 설명 같긴한데)
계좌 이체와 고객을 관리하는 프로그램이 있다고 하자. 각 프로그램의 기능을 아래 사진으로 나눌 수 있다고 해보면, 로깅과 데이터베이스 연결은 두 프로그램에 모두 필요하다! 여기에 AOP
관점을 적용하면 부가 관점에 해당하는 로직을 모듈화할 수 있다.
Portable Service Abstraction, 이식 가능한 서비스 추상화
그래서 이게 뭔데?
일관된 방식으로 데이터베이스에 접근
하도록 인터페이스를 지원한다!단순히 개념에 대해서는 어떤 느낌인지 감이 오지만, 실제로 사용해보면 또 다르겠지. 얼른 스프링에 익숙해져서 스프링이 어떤 컨셉으로, 또 어떤 방식으로 돌아가는지 제대로 이해하자!!!!