-
[Spring] 의존성 주입 (Dependency Injection)JAVA/SPRING 2023. 5. 29. 15:44728x90
1. 의존성 주입이란?
객체를 직접 생성하는 것이 아니라 외부에서 생성된 객체를 주입하는 방법으로 런타임에 의존성을 동적으로 주입하여 결합도를 낮출 수 있습니다.
스프링에서 의존성을 주입할 수 있는 방법으로는 생성자 주입, 필드 주입, 수정자 주입 등의 방법이 존재하고 스프링에서는 생성자 주입을 권장하고 있습니다.
의존성 주입을 통해 클래스들의 결합도를 낮출 수 있고 객체의 유연성을 높이고 테스트 작성이 용이해진다는 장점이 있습니다.
public class Person { private Student student; public Person() { this.student = new Student(); } }
위 코드 예시의 문제점은 Person 클래스와 Student클래스가 강한 결합도를 가지고 있습니다.
DI를 이용하여 문제점은 아래와 같이 해결이 가능합니다.
public class Job {} public class Student extends Job {} public class Police extends Job {} public class Person { private Job job; public Person() { job = new Job(); } }
의존성 주입을 통해 클래스들의 결합도를 낮출 수 있고 객체의 유연성을 높이고 테스트 작성이 용이해진다는 장점이 있습니다.
2. 의존성 주입 방법
생성자 주입
public class Person { private final Job job; public Person(Job job) { this.job = job; } } // lombok을 이용하여 간결하게 사용 가능 @RequiredArgsConstructor public class Person { private final Job job; }
생성자 주입은 생성자가 호출되는 시점에 단 1번만 호출되므로 객체의 불변을 보장합니다.
수정자 주입
public class Person { private final Job job; @Autowired public void setJob(Job job) { this.job = job; } }
수정자 주입은 객체의 변경이 필요할 때 사용 가능합니다. 다만 @Autowired로 주입할 대상이 없는경우에 에러가 발생합니다.
필드 주입
public class Person { @Autowired private final Job job; }
필드 주입은 코드가 간결하나 외부에서 접근이 불가능해 테스트 코드 작성 시 객체를 변경할 수 없다는 단점이 있습니다.
728x90'JAVA > SPRING' 카테고리의 다른 글
[Spring] IoC(Inversion of Control) (0) 2023.09.03 [Spring] AOP (Aspect Oriented Programming) (0) 2023.06.11 [Spring] org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in (0) 2020.04.15 [SPRING] SPRING 게시판 (8) - CRUD [게시글 수정] (0) 2020.03.18 [SPRING] SRPING 게시판 (7) - CRUD [게시글 삭제] (0) 2020.03.16