공부일기

2021.01.13 (수)

  • 스프링강의
  • 구현파트 문제 다 풀기

 

spring keyword


* lombok

- @RequiredArgsConstructor : final 붙은 변수들 가지고 생성자 만들어줌

 

* 조회 대상 빈이 2개 이상일때 (FixdiscountPolicy, RatediscountPolicy) 해결방법 3가지

- @Autowired 필드 명 매칭

parameter나 변수명에 그냥 쓰고싶은 빈 이름을 적어주면 빈이 2개 이상일 때 그 이름으로 매칭한다.

ex) DiscountPolicy discountPolicy 대신에 DiscountPolicy RateDiscountPolicy

 

- @Qualifier 등록

등록시키고 싶은 빈에 @Qualifier("mainDiscountPolicy) 같이 원하는 이름 붙여주고 사용 시에

DiscountPolicy discountPolicy 대신에 @Qualifier("mainDiscountPolicy) DiscountPolicy RateDiscountPolicy

주의 : bean이름 자체를 바꿔주는 것은 아님!

주의 : 만약 "mainDiscountPolicy"를 못찾으면 mainDiscountPolicy라는 이름의 스프링 빈을 추가로 찾음 (그런데 이런 용도로 사용하지 않는 것이 좋다)

 

- @Primary : 우선순위 등록하기 ( 3가지 방법 중 많이 사용하는 방법임 )

 

- 꿀팁 : @Primary, @Qualifier 활용할때 main으로 사용하는 것을 @Primary로 등록해놓고, 가끔 사용하는 것을 @Qualifier로 이름을 등록해놓고 사용하면 좋다.

 

- 주의 : @Qualifier 는 이름을 지정하므로 더 자세하다. 그래서 @Primary와 겹칠경우 우선권이 더 높다.

 

* annotation 직접 만들기

이유 : @Qualifier("mainnDiscountPolicy") 이런식으로 할때 n이 2개가 들어간 오타를 컴파일 시간에 체크할 수가 없음.

방법 : @MainDiscountPolicy annotation을 만들고 그 안을 @Qualifier("mainDiscountPolicy")로 만듬

 

* 조회한 빈이 모두 필요할 때 (List, Map)

- 빈을 List나 Map으로 다 들여오고 동적으로 고를 수 있다. 여기서도 다형성을 사용하여 아래 코드와 같이 사용할 수 있다.

(discountCode 매개변수로 어떤 discount를 사용할지 key를 받아와 map에서 value를 부를 수 있다.

public int discount(Member member, int price, String discountCode) {
    DiscountPolicy discountPolicy = policyMap.get(discountCode);
    return discountPolicy.discount(member, price);
}

 

* 수동 빈 등록은 언제 사용해야 할까?

- 업무 로직 빈 : 비즈니스 요구사항에 따라 추가되거나 변경되는 것들

요구되는 로직이 많기 때문에 컨트롤러, 서비스, 리포지토리 같이 패턴이 비슷한 것들은 -> 자동기능 사용

 

- 기술 지원 빈 : 기술적으로 공통적으로 요구되는 기술들 (아직 뭔지 이해 안감..)

업무로직에 비해 수가 매우 적지만 이 하나가 애플리케이션 전반적으로 다 영향을 미치기 때문에 수동 빈으로 만들어서 명확하게 볼 수 있게 해놓는게 좋음

 

- 다형성을 적극 활용할 때

ex) DiscountPolicy에 FixdiscountPolicy와 RatediscountPolicy 두개가 존재할 때 명확히 어떤것들이 존재하는지 명시하기 위해서

@Configuration
public class DiscountPolicyConfig {

  @Bean
  public DiscountPolicy rateDiscountPolicy() {
    return new RateDiscountPolicy();
  }
  
  @Bean
  public DiscountPolicy fixDiscountPolicy() {
    return new FixDiscountPolicy();
  }
}

이런식으로 따로 설정정보로 만들어서 수동으로 등록하면 어떤 DiscountPolicy 들이 있는지 한 눈에 볼 수 있다.

 

이게 아니더라도 한 pakage에라도 모아놔야 한다.

 

 

 

Coding Test Keyword


* 게임개발 -> 쉬움 (1시간 이내)

* 카카오코테 자물쇠와 열쇠 -> 약간 어려움 (2시간 소요)

'공부일기' 카테고리의 다른 글

2021.01.15 (금)  (0) 2021.01.15
2021.01.14 (목)  (0) 2021.01.14
2021.01.12 (화)  (0) 2021.01.12
2021.01.11 (월)  (0) 2021.01.12
2021.01.09 (토)  (0) 2021.01.09