DI(Dependency Injection)
의존성 주입
한 객체(A)가 다른 객체(B)를 사용할 때 "의존성이 있다"고 한다. A가 B를 의존한다.
A -- B : 의존 대상(B)이 변경되면 A에게 영향을 미친다.(강한 결합)
A -- Interface -- B : 의존 대상(B)의 변화에 영향을 덜 받게 된다.(느슨한 결합)
런타임 시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 주는 걸 의미한다.
스프링 프레임워크는 DI 기능을 지원하는 프레임워크이다.
DI(Dependency Injection) 장점
코드의 유연 : 의존성 주입을 인터페이스 기반으로 설계한다.
변경의 유연 : 객체의 결합도가 낮으면 변경이 용이하고, 테스트하기 좋은 코드가 된다.
실습 : DI 프레임워크 만들기
ApplicationContext의 BeanFactory를 만든다.
의존성 추가
dependencies {
implementation 'org.reflections:reflections:0.10.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}
프로덕션 코드 작성
① @Controller 생성 : (적용 가능 대상 : class), (유지 기간 : runtime)
② @Service 생성 : (적용 가능 대상 : class), (유지 기간 : runtime)
③ @Inject 생성(DI 주입) : (적용 가능 대상 : 생성자, 필드, 메서드), (유지 기간 : runtime)
④ Controller와 service를 생성한다.
테스트 코드 작성
① BeanFactory 객체를 생성한 다음 이에 대한 테스트 코드를 작성한다.
② setUp() : 테스트 메서드가 호출되기 전에 미리 수행되어야 하는 작업을 작성한다.
reflections와 beanFactory를 초기화 한다.
해당 애너테이션이 붙은 클래스 타입의 객체를 반환하는 메서드를 구현한다.
③ 테스트 코드 : beanFactory에서 조회한 인스턴스 값과 service의 값이 널이 아닌지 확인한다.
작성한 DI 프레임워크가 정상적으로 동작 된다면 service의 값이 널이 아니어야 한다.
의존성 주입 : controller -- service
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
'Java > [패스트캠퍼스] 50일 포트폴리오 챌린지' 카테고리의 다른 글
[15일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.22 |
---|---|
[14일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.21 |
[12일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.19 |
[11일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.18 |
[10일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) (0) | 2023.08.17 |