Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 개발
- string
- lombok
- Annotation
- 삼행시
- repository
- 스프링
- 아스키코드
- 문자열
- 항해
- yeouido
- java
- 자바
- StringBuffer
- 이행시
- CS
- bit
- upc
- 어노테이션
- 윤동주
- Service
- replace()
- Spring
- StringBuilder
- Controller
- 백엔드
Archives
- Today
- Total
Dev.끄적끈적
DI (의존성 주입) 의 이해 본문
"제어의 역전 (IoC: Inversion of Control)" 프로그램의 제어 흐름이 뒤바뀜
- 일반적: 사용자가 자신이 필요한 객체를 생성해서 사용
- IoC (제어의 역전)
- 용도에 맞게 필요한 객체를 그냥 가져다 사용
- "DI (Dependency Injection)" 혹은 한국말로 "의존성 주입"이라고 부릅니다.
- 사용할 객체가 어떻게 만들어졌는지는 알 필요 없음
- 실생활 예제) 가위의 용도별 사용
- 용도에 맞게 필요한 객체를 그냥 가져다 사용
- Repository DI 적용
public void createProduct(Product product) throws SQLException {
// DB 연결
Connection connection = DriverManager.getConnection("jdbc:h2:mem:springcoredb", "sa", "");
DI 적용하기 위해, 위에 코드를 아래로 변경.
private final String dbUrl;
private final String dbId;
private final String dbPassword;
public ProductRepository(String dbUrl, String dbId, String dbPassword){
this.dbUrl = dbUrl;
this.dbId = dbId;
this.dbPassword = dbPassword;
}
public void createProduct(Product product) throws SQLException {
// DB 연결
Connection connection = getConnection();
+
private Connection getConnection() throws SQLException {
return DriverManager.getConnection(dbUrl, dbId, dbPassword);
}
- Service DI 적용
public class ProductService {
public Product createProduct(ProductRequestDto requestDto) throws SQLException {
// 요청받은 DTO 로 DB에 저장할 객체 만들기
Product product = new Product(requestDto);
ProductRepository productRepository = new ProductRepository();
productRepository.createProduct(product);
return product;
}
위에 코드를 아래로 변경,
@Component // 아래 bean으로 관리
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
public Product createProduct(ProductRequestDto requestDto) throws SQLException {
// 요청받은 DTO 로 DB에 저장할 객체 만들기
Product product = new Product(requestDto);
productRepository.createProduct(product);
return product;
}
- Controller 또한 DI 적용
public class ProductController {
private final ProductService productService;
@Autowired
public ProductController(ProductService productService) {
this.productService = productService;
}
'Spring' 카테고리의 다른 글
JPA의 이해 (0) | 2022.05.17 |
---|---|
Bean과 스프링 IoC 컨테이너 (0) | 2022.03.27 |
Controller, Service, Repository 역할, 분리 (0) | 2022.03.27 |
리팩토링이란? (0) | 2022.03.27 |
HTTP 메시지 이해하기 (0) | 2022.03.26 |