
1) 의존 주입의 개념
의존 주입은 스프링뿐 아니라, 자바 객체 프로그래밍에서 매우 중요하게 생각하는 개념이다.
객체지향 프로그래밍에서 다른 객체를 사용하는 것을 다르게 표현하면 '다른 객체에 의존한다.'라고 표현한다.

→방법1 : A객체는 B, C객체의 기능에 의존한다.
→방법2 : B, C 객체가 외부에 생성되어 있고, A객체에 주입된다.
여기서 B, C객체를 생성하고 B, C객체의 라이프 사이클을 관리하고
A객체에 의존 주입을 관리해주는 무엇인가를 컨테이너라 부른다.
개발자가 직접 객체를 제어하지 않고 컨테이너로 객체의 제어권이 넘어갔다는 의미로
제어의 역전(Inversion Of Contral: IoC)이라는 용어가 사용된다.
스프링이 이 IoC 컨테이너의 역활을 하며, 스프링은 객체를 생성, 라이프사이틀 관리 및 필요로 하는
객체에 의존 주입을 하는 컨테이너이고, 라이브러리들의 집합체라고 할 수 있다.
2) 강한 결합 VS 약한 결합
직접 객체를 생성하면 생성부터 메모리 관리를 위한 소멸까지 해당 객체의 라이프사이클을
개발자가 다 관리해야 하므로 강한 결합이 된다.
그리고 이미 누군가 생성한 객체를 주입받을 경우, 사용하기만 하면 되므로 약한 결합이 된다.
※예제




※ 프로젝트 명 옆에 [boot]표시가 보이지 않는다면 표시될 때까지 잠시 기다린다.



※ @Override 어노테이션은 부모 클래스나 인터페이스로부터 어노테이션 바로 다음의 메서드를 오버 라이딩했다는 의미

※ 생성자와 각 변수에 대한 세터로 구성되었다. 기본생성자(8라인), 파라미터를 받는 생성자(10라인),
print 메서드(25라인) 을 통해 변수에 저장된 정보를 출력하는 메서드 구현

※ Member클래스의 기능들을 사용할 수 있도록 설정
- 6라인: @Configuration 어노테션이 붙은 클래스는 스프링 설정으로 사용됨을 의미
- @Bean: 메서드의 리턴값은 빈 객체로 사용됨을 의미
- 23라인: 어노테이션에 이름을 주면 해당 클래스를 빈으로 등록할 때 입력한 이름으로 빈의 이름 변경 가능


3) 어노테이션으로 DI 사용하기



- 8라인: Member 클래스를 빈으로 등록하겠다는 의미
- 10라인: 빈이 생성될 때 name변수의 기본값으로 "홍길동"으로 지정
- 12라인: 빈이 생성될 때 nickname 변수의 기본값으로 "도사"를 지정
- 14라인: 빈이 생성될 때 printer변수가 참조할 객체를 자동으로 찾아온다.
- 15라인: 유사한 객체가 여러 개일 때 빈의 이름으로 정확하게 지정

- 5라인: Print A,B 클래스를 빈으로 등록하겠다는 의미. 이때 등록할 이름을 printA,b를 사용하겠다고 이름 지정

※ @SpingBootApplication 이노테이션의 3가지 기능
- @Configuration: Bean을 생성할 때 Singletone으로 한 번만 생성
- @EnableAutoConfiguration: 스프링 어플리케이션 컨텍스트를 만들 때 자동으로 설정하는 기능을 켠다.
- @ComponentScan: 지정한 위치 이하에 있는 @Component와 @Configuration이 붙은 클래스를 스캔 빈으로 등록.
※ 프로그램이 실행되면 Ex03AnnotationDiApplication 클래스의 main 메서드가 가장 처음으로 실행
이 때 @SpringBootApplication 어노테이션을 통해 자동으로 빈을 검색하고 등록할 후 main 메서드의
SpringApplication.run을 통해 내장 톰캣을 실행한 다음, 자동으로 WebApplicationContext를 생성


- 9라인: MyController 클래스를 빈으로 등록하겠다는 의미
- 11라인: 빈이 생성될 때 member1 변수가 참조할 객체를 자동으로 찾아온다.
- 13라인: 빈이 생성될 때 printer변수가 참조할 객체를 자동으로 찾아온다.
- 14라인: 유사한 객체가 printerA, printerB 등 여러 개일 때 빈의 이름으로 정확하게 지정
- 19라인: 웹 브라우저에서 사용자가 /로 get 방식의 url 호출을 하면 다음 라인의 root() 메서드를 실행
- 20라인: @RequestBody 어노테이션은 Json이나 Xml등 REST API 형태의 응답을 할 경우, html 태그 없이 순수하게 스트링 데이터만으로 응답할 경우를 지정


'Framwork > SpringBoot' 카테고리의 다른 글
| [Spring Boot] JSP 사용하기 (0) | 2022.04.12 |
|---|---|
| [Spring Boot] 정적 리소스 사용하기 (2) | 2022.04.06 |
| [Spring Boot] 프로젝트 만들기 (0) | 2022.04.01 |
| [Spring Boot] 설치 (0) | 2022.04.01 |