제어의 역전(IoC) & 컴포넌트 스캔

썩은요플렛's avatar
Jul 30, 2024
제어의 역전(IoC) & 컴포넌트 스캔
 
@RestController가 붙은 애들을 new를 해서 자료형에 담음
 

제어의 역전(Inversion of Controll)

 
  • IoC는 객체의 생성과 생명주기 관리를 개발자가 직접 제어하는 것이 아닌, 이를 IoC 컨테이너 또는 프레임워크에 위임하는 디자인 원칙
  • 객체 간의 의존성을 줄이고, 코드의 모듈화 및 재사용성 향상
  • 모의 객체 주입 단위 테스트를 쉽게 작성 가능
  • 모듈화가 잘 되어 유지보수 용이.
이걸 IOC(inversion of control) >> 제어의 역전 즉, 개발자가 하는 NEW를 스프링이 제어권을 들고 있다 이것을 제어의 역전이라고 한다 NEW의 주도권을 스프링이 가지는 것 개발자는 어노테이션(@)만 붙여라 컴포넌트 스캔은 .COM패키지 이하의 모든 클래스를 스캔한다
 
💡
예시 코드
 
package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Random; @RestController //component 스캔 new되어서 자료에 뜨는데 IOC public class HelloController { public HelloController(){ System.out.println("HelloController 컴포넌트 스캔됨"); } @GetMapping("/home") public void home(){ System.out.println("home 호출됨"); //스프링에서 찾을 수 있다 RestController가 떠있어서 //데모 패키지 이하에 것들만 뜬다 //얘네가 어딜 스캔하는 지 알아야한다 //메서드가 중요하지는 않다 어차피 어노테이션 걸어놓으면 그 이하의 패키지들은 전부 스캔하기 때문 } @GetMapping("/hello") public String hello(){ String name = "홍길동"; return "<h1>hello "+name+"</h1>"; } @GetMapping("/random") public String random(){ Random r = new Random(); int num = r.nextInt(5)+1; return "<h1>random "+num+"</h1>"; //요청할 때마다 페이지가 변한다(동적 페이지) } }
 

컴포넌트 스캔

스프링프레임워크같은 현대적 프레임워크나 라이브러리에서 지원하고 있고,
주로 어노테이션(@)을 사용하여 스캔 대상을 지정하거나 필터링을 한다
@RestController와 같은 어노테이션은 해당 클래스를 컨트롤러로 인식하게 되어 자동으로 해당 컨트롤러를 등록
컴포넌트 스캔은 @RestController 어노테이션이 붙은 클래스를 스캔하여 등록한다
 
Share article

RottenYogurt's Development Blog