20210119 TIL(Spring)
2022. 1. 19. 22:28
ㅇTIL
1.Django
진행했던 사이드 프로젝트 Readme 작성을 처음 해보았다. 그러면서 마크다운 방식의 깃헙 글 작성법에 대해서 학습하게 되었다. 앞으로 자주 사용하면서 익숙해져야 할 방식이기도 하고, 현재까지 진행한 것에 대한 정리가 필요한 시점이라 생각해서 찾아보게 되었다.
2.Spring
다양한 의존 관계의 주입 방법에 대해 학습하였다.
- 생성자를 통한 주입
-
@Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; }
- 생성자 호출 시점에 딱 1번만 호출 되는 것이 보장되는 방식
- 생성자 주입의 특징
- 불변 >> 생성자는 딱 1번만 호출되고 수정이 불가하다.
- 필수 >> "final" 키워드를 필드 타입에 작성함으로써, 생성자에 의한 필드값이 반드시 존재해야 한다.
- 생성자가 1개면, @Autowired 애노테이션은 생략이 가능하다.(단 스프링 빈만 해당)
-
- 수정자(setter)를 통한 주입
-
//수정자 주입 public void setDiscountPolicy(DiscountPolicy discountPolicy) { this.discountPolicy = discountPolicy; } public void setMemberRepository(MemberRepository memberRepository) { this.memberRepository = memberRepository; }
- 'set + 필드명' -> 필드값을 수정하거나 변경할 가능성이 있는 의존관계에서 사용한다.
- 어떤 빈을 생성할 시, 의존관계에 있는 빈을 주입하지 않고, 나중에 수정자(setter)에 의해 주입한다. 따라서 빈등록과 의존관계 주입이 동시에 이뤄지지 않도록 분리해준다.
-
- 필드 주입
-
public class OrderServiceImpl implements OrderService{ @Autowired private MemberRepository memberRepository; @Autowired private DiscountPolicy discountPolicy; }
- 필드 타입 바로 앞에 @Autowired를 붙여서 의존성을 주입하는 방식
- 사용을 권장하지 않는다.
- Q. 필드 주입 방식을 순수 자바코드로 테스트 하지 못하는 이유?
- 순수자바 코드는 스프링 컨테이너를 실행하지 않은 상태(@Autowired/@Bean/@Configuration 사용 불가)
- 생성자나 수정자 없이 필드에 구현체를 넣지 못한다.
- 스프링 컨테이너가 없으므로, 필드에 의존성 주입을 하지 못하기 때문에, NullPointerException이 발생한다.
-
ㅇ회고
- Readme를 작성하며 타인의 Readme 작성법을 찾아보게 되었고, 좋은 예시들을 나의 Readme와 비교하게 되었다. 꽤 긴시간을 투자하여 사이트를 구현했지만, 막상 정리해보니 단순한 기능구현에 지나지 않았다는 생각이 들었을 때, 허탈한 마음이 불쑥 들었다. 비교로 얻을 수 있는 건 비관적인 태도밖에 없다는 것을 다시 한번 깨닫고, 꾸준하게 성장하고 학습한다는 생각 하나만으로 최선을 다해야겠다.
- 어제의 나만을 뛰어넘는 것을 목표로 하자.
ㅇ내일 할일
- Django deploy에 대한 방법을 모색해보자.
- 스프링 의존관계 자동 주입 강의 3개 듣고 정리.
- 아르바이트
'TIL' 카테고리의 다른 글
20210126 TIL(DRF, __str__ 메소드) (0) | 2022.01.26 |
---|---|
20210123~24 TIL(Django Restframework, Spring) (0) | 2022.01.24 |
20210118 TIL(spring-componant) (0) | 2022.01.18 |
20210116 ~ 20210117 TIL(Spring) (0) | 2022.01.17 |
20210115 TIL (0) | 2022.01.15 |