개발공간/HW

❓DI를 구현하는 가장 좋은 방법?!

로지네 2023. 4. 19. 10:26

1번 과제가 수월하다고 했더니만 2번 과제를 보고 머리가 띵 ~ 했다,, ㅎㅎㅎㅎ 아침인 탓이겠지? 🙄

 

Controller는 클라이언트의 요청을 받아와 처리하는 역할을 함

그리고 비즈니스 로직을 처리하는 Service가 존재!  그리고 Service는 데이터베이스와 직접적으로 연결되는 Repository를 用

 

但, 이렇게 각각의 객체를 직접 생성해서 사용한다면, 코드의 유지 보수나 기능 변경 시 많은 문제가 발생할 수 있음

따라서 이 문제를 해결하기 위해 스프링 프레임워크에서는 의존성 주입(DI)이라는 개념을 도입하게 됨

 

 

DI를 구현하는 방법으로는 크게 아래 3가지가 존재함

1️⃣ 어노테이션 사용하기 2️⃣ 생성자 사용하기 3️⃣ Setter 사용하기

 

그 중 어떤 방법이 제일 좋을까?

 

💭 내 생각에는 2번 생성자 사용하기이다!

 

이유는

1. 의존성이 명확히 드러남

- 생성자 주입을 사용하면 클래스의 의존성이 코드 상으로 명확히 드러남. 따라서, 클래스를 사용하려면 어떤 의존성이 필요한지 알 수 있음

2. 의존성이 변경될 때 코드 수정이 적음

- 만약 의존성이 변경되면 생성자의 파라미터만 변경하면 됨. 그리고 이러한 변경이 다른 부분에 영향을 미치지 않기 때문에 코드 수정이 적음

3. 단위 테스트가 쉬움

- 생성자 주입을 사용하면 클래스의 의존성을 쉽게 대체할 수 있음. 따라서 단위 테스트 작성을 용이하게 만든다!

 

 

여러 의존성이 있는 클래스를 다룰 때 Setter 주입(Setter Injection)을 사용하는 것이 좋을 수도 있음

Setter 주입은 선택적으로 사용할 수 있는 의존성을 다룰 때 유용함!  즉, Setter 주입을 사용하면 의존성을 선택적으로 설정할 수 있다.

 

어노테이션 주입(Autowired)은 코드 가독성이 떨어질 수 있으므로 지양하는 것이 좋음

그리고 필드 주입(Field Injection)은 의존성을 숨기고 있기 때문에 테스트 작성이 어려워질 수 있으므로 사용하지 않는 것이 좋다! 

'개발공간 > HW' 카테고리의 다른 글

❓REST API 규칙  (0) 2023.04.14
❓REST API vs RESTful API  (0) 2023.04.13
💭 본격 프로젝트 Entity 구상해보기  (0) 2023.04.13
❓REST API  (0) 2023.04.12
🔎 스프링에서 사용하는 어노테이션  (0) 2023.04.11