✅ @Component VS @ComponentScan 차이점

졸용·2025년 3월 28일

✅ @Component란?

스프링이 관리하는 빈(Bean)으로 등록하겠다는 표시


✅ @ComponentScan이란?

특정 패키지를 스캔하여, @Component 또는 @Controller, @Service, @Repository 가 붙은 클래스를 자동으로 스프링 빈으로 등록하는 역할


✅ @Component VS @ComponentScan 차이점

✔️ @Component → "내가 등록할 테니까 너는 찾아만 줘"

✔️ @ComponentScan → "어디 있는지 모르니까 네가 찾아서 등록해 줘"

@ComponentScan을 써야 @Component가 붙은 클래스들을 자동으로 찾아서 빈으로 등록할 수 있다❗



✅ @Autowired란?

  • ❗스프링에서 의존성 주입(Dependency Injection, DI)을 자동으로 해주는 어노테이션❗

☑️ @Autowired의 주입 방식 (DI 방식 3가지)

  1. 생성자 주입 (권장!)

  2. 필드 주입 (비추천)

  3. 세터 주입 (선택적 의존성 주입할 때 사용)

☑️ 가장 권장되는 방식 (생성자 주입) 사용 예시

@Component
public class Car {
    private final Engine engine;

    @Autowired
    public Car(Engine engine) {  // 생성자로 주입
        this.engine = engine;
    }
}

✔️ final 키워드를 사용해 객체가 변경되지 않도록 할 수 있다.

❗생성자 주입 방식에서는 final 키워드로 필드를 선언해주기 필수❗ → 무조건 값이 있도록 만들어준다.

필드에 final은 생성자 주입 방식만 사용할 수 있다.

✔️ 테스트 코드 작성이 편리해진다.

➡️ @Autowired를 사용하면 개발자가 직접 객체를 생성할 필요 없이, 스프링이 알아서 주입해 줘서 편리하다.



✅ IoC (제어의 역전) 완벽하게 활용하기

@Component로 빈을 만들고,

@Autowired주입하고,

@ComponentScan으로 자동 검색하면 IoC(제어의 역전)를 완벽하게 활용할 수 있다.

IoC란?

profile
꾸준한 공부만이 답이다

0개의 댓글