출처
- https://beststar-1.tistory.com/33
- https://junhkang.tistory.com/42
- https://www.youtube.com/watch?v=1vdeIL2iCcM
- 예제로 배우는 스프링 입문 (개정판)-백기선님
웹을 쉽게 개발하기 위해 나온 프레임워크인 "스프링"은 개발자가 직접 설정해주어야 하는 것들이 많아서 시간도 오래 걸리고 복잡한 관계로 "스프링 부트"가 나왔다.
스프링부트는 웹을 개발하기 위한 기본적인 기능들을 많이 갖추고있는 프레임 워크이다.
스프링 부트에서 중요한 컨셉은 IoC와 AOP, PSA이다.
1/. IoC는 제어의 역전이라는 뜻으로, 내가 가진 제어권을 무언가가 가져버린다는 뜻이다.
a클래스에서 b클래스를 직접 생성해서 사용했을 때 a클래스는 b클래스에 의존하고있고, b클래스를 제어할 수 있다고 한다.
public class A {
private B b = new B(); // A가 직접 생성자로 B를 만듬
}
내가 생성하지 않고 외부 어딘가에서 생성을해서 보내줄 때 제어가 역전되었다고 한다.
그 외부 어딘가에서 제어를 해주냐면 IoC 컨테이너이다.
a클래스와 b클래스 사이에 IoC 컨테이너가 제어권을 가져서 인스턴스를 생성해주고 메모리를 해제해주는 것까지 해준다.
// 이 코드에서는 A가 생성하지 않는다.
public A(B b) {
this.b = b;
}
IoC는 DI로 구현할 수 있다. *의존성 주입은 Bean끼리만 가능하다.*
의존성 주입은 외부에서 B클래스를 생성해서 주입해주는 것이다. 방법은 세가지로 Setter Injection, Constructor Injection, Method Injection이 있다. 생성자 주입으로 쓰는 것이 가장 바람직하다고 한다.
IoC가 필요한 이유는 객체지향 원칙을 잘 지키기 위해서라고 한다. 이러한 방법으로 의존성을 주입하면 의존성이 감소하며, 코드양도 줄어들고 테스트도 용이해진다는 장점이 있다.
*의존성이 감소한다는 말은 내가 클래스를 직접 생성해서 만들었을 때에는 생성한 클래스가 수정되면 생성한 부분도 수정해야할 수 있는데 이렇게 하면 수정하지 않아도 된다는 말 같다..
예를들어 내가 필요한 클래스가 최상위 클래스에서부터 내려온다면 거기서부터 의존성이 주입되어있어 나는 내가 필요한 클래스만 가져다 쓰면 된다?? *
------
Bean은 스프링에서 관리하는 객체인데 일반 객체와 다른 점은 스프링 컨테이너(ApplicationContext)에서 관리되고있다는 점이다.
등록하는 방법은 크게 두 가지가 있는데 첫 번째는 애너테이션을 다는 방식이다.
@Component 애너테이션을 가지고 있는 애노테이션들을 달아두면 @SpringbootApplication 안의 @ComponentScan에서 스캔을 시작하고 Bean으로 등록한다.
@Component 애노테이션 안에는 @Service @Repository @Controller @Comfiguration 등이 있다.
*Repository는 springDataJpa에 의해 Bean으로 등록이 된다.
두 번째 방법은 자바 설정파일에서도 직접 등록하면 bean을 등록하는 방법이다. 그런데 왜 굳이 애노테이션 한 줄을 넣는게 아니라 파일을 생성하고 그 안에서 @bean으로 설정을 해주는지??
-------
- AOP
- PSA
'묘공단 스프링부트 스터디' 카테고리의 다른 글
묘공단 스프링부트 스터디 5주차 (2) (0) | 2023.12.06 |
---|---|
묘공단 스프링부트 스터디 5주차 (1) (2) | 2023.12.03 |
묘공단 스프링부트 스터디 4주차 (1) | 2023.11.27 |
묘공단 스프링부트 스터디 3주차 (2) | 2023.11.23 |
묘공단 스프링부트 스터디 2주차 (1) | 2023.11.15 |