의존성 주입(Dependency Injection)

Jan 30, 2024
의존성 주입(Dependency Injection)
 
 
의존성 주입은 이전 블로그에서 간단하게 설명했다.
 
의존성 주입은 클래스A와 클래스B가 서로 의존 상태일 때, 클래스를 생성하지 않고 외부에서 주입받아 사용한다. 외부의 클래스를 사용할 때 매번 새로운 객체를 만들어 사용하게 되면 메모리 부하가 발생하게 된다. 따라서 의존성 주입을 new 를 하지 않고 의존성 주입을 하는 법을 정리하겠다.
 
의존성 주입에는 크게 3가지가 있다.
 

1. 생성자 주입

 
@Controller public class UserController { private UserRepository userRepository; // 의존성 주입 받기 위해 만듬. 의존성 주입을 받을 떄 final을 붙여서 사용함 private HttpSession session ; public UserController(UserRepository userRepository) { this.userRepository = userRepository; // 생성자를 만들어서 디폴트 생성자를 제거함. }
 
클래스에 외부 클래스의 객체를 생성자를 통해 초기화한다.
 
@PostMapping("/login") public String login(UserRequest.JoinDTO requsetDTO){ User user = userRepository.findByUsernameAndPaaword(requsetDTO) }
 
생성자를 통해 외부 클래스 UserRepository 객체를 만들어 호출할 수 있다.
 
 

2. @AllArgsConstructor 사용

@AllArgsConstructor 은 lombok에서 제공하는 라이브러리 어노테이션으로 , 사용하게 되면 생성자를 자동으로 만들어준다.
 
@AllArgsConstructor @Controller public class UserController { private UserRepository userRepository; // 의존성 주입 받기 위해 만듬. 의존성 주입을 받을 떄 final을 붙여서 사용함 private HttpSession session ; this.userRepository = userRepository; // 생성자를 만들어서 디폴트 생성자를 제거함. @PostMapping("/login") public String login(UserRequest.JoinDTO requsetDTO){ User user = userRepository.findByUsernameAndPaaword(requsetDTO) } }
 

3. @RequiredArgsConstructor 사용

 
@RequiredArgsConstructor 역시 Lombok 에서 제공하는 라이브러리 어노테이션으로 ,
final이나 @NonNull으로 선언된 필드의 생성자를 만들어준다.
 
@RequiredArgsConstructor @Controller public class UserController { private final UserRepository userRepository; // 의존성 주입 받기 위해 만듬. 의존성 주입을 받을 떄 final을 붙여서 사용함 private final HttpSession session ; this.userRepository = userRepository; // 생성자를 만들어서 디폴트 생성자를 제거함. @PostMapping("/login") public String login(UserRequest.JoinDTO requsetDTO){ User user = userRepository.findByUsernameAndPaaword(requsetDTO) } }
 
 
💡
@AllArgsConstructor 는 모든 객체의 생성자를 만든다. 따라서 @RequiredArgsConstructor 를 사용하고 원하는 변수에 final 을 붙여 사응하는 것이 좋다.
 
 
Share article

{CODE-RYU};