20210119 TIL(Spring)

2022. 1. 19. 22:28

ㅇTIL

1.Django

진행했던 사이드 프로젝트 Readme 작성을 처음 해보았다. 그러면서 마크다운 방식의 깃헙 글 작성법에 대해서 학습하게 되었다. 앞으로 자주 사용하면서 익숙해져야 할 방식이기도 하고, 현재까지 진행한 것에 대한 정리가 필요한 시점이라 생각해서 찾아보게 되었다.

 

2.Spring

다양한 의존 관계의 주입 방법에 대해 학습하였다.

  1. 생성자를 통한 주입
    • @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 애노테이션은 생략이 가능하다.(단 스프링 빈만 해당)
  2. 수정자(setter)를 통한 주입
    • //수정자 주입
          public void setDiscountPolicy(DiscountPolicy discountPolicy) {
              this.discountPolicy = discountPolicy;
          }
      
          public void setMemberRepository(MemberRepository memberRepository) {
              this.memberRepository = memberRepository;
          }
    • 'set + 필드명' -> 필드값을 수정하거나 변경할 가능성이 있는 의존관계에서 사용한다.
    • 어떤 빈을 생성할 시, 의존관계에 있는 빈을 주입하지 않고, 나중에 수정자(setter)에 의해 주입한다. 따라서 빈등록과 의존관계 주입이 동시에 이뤄지지 않도록 분리해준다. 
  3. 필드 주입
    • 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

BELATED ARTICLES

more