티스토리 뷰
728x90
반응형
1. DI (Dependency Injection)
(1) 의존성(Dependency)
- 한 객체(A)가 다른 객체(B)를 사용하는 것을 의미한다. A->B
- 만약 B가 변경된다면 A에도 영향을 미친다. 즉 A는 B의 변화에 취약하다.
- 이를 개선하기 위해 인터페이스를 두어 서로의 결합도가 느슨해지도록 설계를 하기도 한다.
(2) 의존성 주입(Dependency Injection / DI)
- 런타임 시 의존 관계를 맺는 대상을 외부(스프링 프레임워크)에서 결정하고 주입해 주는 것을 의미한다.
- 스프링 프레임워크는 DI 기능을 지원해 주는 프레임워크이다.
(3) DI 장점
- 의존성 주입을 인터페이스 기반으로 설계하면,
- 느슨한 결합도(loose coupling)를 가질 수 있고,
- class 간의 결합도를 낮출 수 있으며,
- 변경에 유연해진다.
- 느슨한 결합도를 갖는 객체끼리는 부품을 갈아 끼우듯 쉽게 변경할 수 있다.
- 즉, 테스트하기 좋은 코드가 된다.
2. DI 프레임워크 실습
(1) 의존성 추가
// reflection
implementation 'org.reflections:reflections:0.10.2'
// assertj (가독성)
testImplementation ‘org.assertj:assertj-core:3.22.0’
(2) 구현 참고사항
- Controller Annotation을 생성한다.
- @Tartget({ElementType.TYPE}) : class에 붙일 어노테이션임을 명시한다.
- @Retention(REtentionPolicy.TUNTIME) : 유지기간은 런타임 동안이란 뜻이다.
- Service Annotation을 생성한다. Service는 Controller와 동일한 어노테이션을 붙인다.
- Inject Annotation도 생성한다.
- @Target의 타입으로 CONSTRUCTOR, FIELD, METHOD를 추가한다. 생성자 필드 메서드에 붙일 수 있다는 의미이다.
- @Retention 유지기간은 동일하게 런타임 시로 설정한다.
- 테스트를 위해 임의로 UserController와 UserService 객체를 생성하고, UserController에 userService를 입력하는 임의의 코드를 작성하여 의존성을 부여한다.
- BeanFactoryTest
- Reflections와 beanfactory 를 필드로 설정한다.
- 테스트 실행 전, reflections를 생성한다. Reflections는 org.example 하위 클래스를 모두 포함하게 설정한다.
- 테스트 코드로는 getBean을 사용하여 객체를 key로하고 인스턴스를 value로 하여 객체가 입력되었을 때, 인스턴스를 반환하는 코드를 구현한다.
- getTypesAnnotaedWith 메서드는 Controller 어노테이션과 Service 어노테이션이 붙은 클래스들을 set 형태로 return 하는 메서드이다.
- beanFactory는 위 메서드를 통해 받은 클래스 set을 받아 저장한다.
- 인스턴스를 반환하기 위해 인스턴스를 가져올 Map을 생성하는데, 이때 생성자와 파라미터를 통해 인스턴스를 생성하여 저장한다.
- ReflectionUtils.getAllConstructors를 통해 모든 constructor를 가져올 수 있다. 이 때 ReflectionUtils.withAnnotation을 통해 특정 어노테이션이 붙은 class만 가져올 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
728x90
반응형
'Study > FastCampus' 카테고리의 다른 글
[Java Project] Part 2. 게시판 서비스 만들기 - 개발 환경 및 개발 목적 (0) | 2023.08.22 |
---|---|
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - Reflaction 및 Spring MVC와 비교하기 (0) | 2023.08.21 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - MVC 프레임워크 (0) | 2023.08.19 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 프런트 컨트롤러 (0) | 2023.08.18 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - DB 커넥션 풀 (0) | 2023.08.17 |
댓글