Backend-dev/Spring

[Spring] @Autowired 사용법? 스프링 빈 의존성 주입과 @RequiredArgsConstructor

Hannana. 2024. 2. 5. 19:54
반응형

 

 

의존성(Dependency)이란?
A 클래스에서 b함수를 호출하기 위해서 B함수가 필요할 때, 'A클래스는 B클래스의 의존성을 가진다' 고 한다.

 

 

스프링 빈을 등록하고 의존성 주입을 할 때

@Autowired를 쓰면 의존성 주입이 편하다.

이렇게 config 파일에서 빈을 등록해주고,

컨트롤러에서 의존성 주입을 해주려는데

 

밑줄이 뜨면서 사용을 추천하지 않는다고 떴다.

 


@Autowired의 장점은 매우 편리하다는 것.

단점은 

-의존성 불분명성: @Autowired를 사용하면 코드가 어디서든 해당 빈을 주입할 수 있으므로 어떤 클래스가 어떤 빈을 주입하는지 명확히 파악하기 어려움
-코드의 복잡성 증가

 

등이 있다.

 


대신 사용할 수 있는 방법으로는

-생성자 주입(Constructor Injection)

-Setter 주입(Setter Injection)

등이 있는데(getter,setter...)

 

개인적으로 제일 편한 건 @RequiredArgsConstructor 어노테이션이었다.

  •  @RequiredArgsConstructor 이란?

 =>  Lombok에서 제공하는 애노테이션으로, 클래스의 필드에 대한 생성자를 생성해준다. 이 어노테이션을 사용하면 final로 선언된 필드에 대한 생성자를 자동으로 생성할 수 있다. 객체를 초기화하는 코드를 작성할 필요 없이 필드를 선언하면 자동으로 생성자가 생성됨.

 

 

예시를 들어보자.

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class MyClass {
    private final String name;
    private final int age;
}

이렇게 어노테이션이 클래스에 적용이 되면,

 

public MyClass(String name, int age) {
    this.name = name;
    this.age = age;
}

이 코드가 자동으로 생성된다는 것이다.

 

참고로 생성자가 생성되려면 필드가 final 속성이어야 함을 잊지 말자.

 

 

 

 

 

 

 

반응형