[F-lab 모각코 챌린지 59일차] TIL

JeongheeKim·2023년 7월 29일

TIL

목록 보기
59/66

학습계획


  • 정적 팩토리 메서드
  • spring security flow 파악하기
  • 토비의 스프링 3장

Today I Learned


정적 팩토리 메서드

  • 객체 생성을 캡슐화 하는 기법
  • 객체 생성을 하는 코드를 static으로 선언한다.
  • 팩토리메서드 패턴 등 디자인 패턴과는 무관하다.
  • 장점
    • 메서드 명이 있어서 생성자보다 가독성이 좋다.
    • 호출할 때마다 새로운 객체를 생성할 필요가 없다.
  • 단점
    • 자바 doc생성 시 정적 팩토리 메서드도 다른 메서드와 동일하게 생성되므로 구분하기 쉽지 않다. → 문서화에 충분한 설명 필요
      • 정적 팩토리 메서드를 헷갈리지 않기 위해 네이밍 컨벤션을 따르는것이 좋다.
        • from
          • 하나의 매개변수를 받아서 인스턴스 생성
        • of
          • 여러개의 매개 변수를 받아서 인스턴스 생성
        • getInstance
          • 인스턴스를 반환하지만 동일한 인스턴스임을 보장하지 않음
        • create / newInstance
          • 매번 새로운 인스턴스 반환

생성자는 동일한 시그니처로는 여러개의 생성자를 만들 수 없다. 아래 예제 코드처럼 정적 팩토리 메서드를 통해 동일한 시그니처로 특정한 경우를 셋팅한 객체를 생성할 수 있는 메서드를 만들 수 있다.

public class Order {
    private boolean prime;
    private boolean urgent;
    private String orderName;

    public static Order primeOrder(String orderName) {
        Order order = new Order();
        order.prime= true;
        order.urgent = false;
        return order;
    }

    public static Order urgentOrder(String orderName) {
        Order order = new Order();
        order.prime= false;
        order.urgent = true;
        return order;
    }
}

생성자로는 인스턴스의 생성을 매번 새롭게 정의하게됨

하나의 인스턴스만 생성하고 싶을 경우 정적 팩토리 메서드를 통해 하나의 인스턴스가 생성되도록 보장할 수 있다.

public class Settings {
    private boolean useAutoStreering;
    private boolean userABS;
    private Settings() {}
    private static final Settings SETTINGS = new Settings();
    public static Settings newInstance() {
        return SETTINGS;
    }
}
public class Main {

    public static void main(String[] args) {
        System.out.println("setting1 : " + Settings.newInstance());
        System.out.println("setting2 : " + Settings.newInstance());
        System.out.println("setting3 : " + Settings.newInstance());
    }

}

사용자가 정보를 입력하면 AuthenticationFilter가 정보를 가로챈다.

  1. 스프링 부트에서는 @EnableAutoConfiguration을 이용해서 SecurityFilterAutoConfiguration클래스를 로드하고 SpringSecurityFilterChain 빈을 등록한다.

  2. SpringSecurityFilterChain은 여러 필터 리스트를 갖고있는데 Filter들이 적용될 때 list 순서대로 적용된다.

    FilterChain에는 여러가지 종류가 있는데 프로젝트에 사용된 필터만 살펴본다.

    1. UsernamePasswordAuthenticationFilter
      1. form기반 인증처리
      2. AuthenticationManager를 통한 인증 실행
      3. 인증 성공 시 Authentication객체를 SecurityContext에 저장 후 AuthenticationSucessHandler 실행
      4. 인증 실패 시 AuthenticationFailureHandler실행

토비의 스프링 - 3장

스프링에 적용된 템플릿 기법 학습

❓DB관련 코드에서 예외사항에 대한 예외처리가 안되어있다면 어떻게 될까?

예외가 발생하면 사용한 자원에 대한 반납이 이루어지지 않는다. 이는 일정한 커넥션 개수를 유지하는 커넥션 풀에 자원이 부족한 현상을 초래할 수 있다.

  • 일정한 작업의 흐름에서 일부 기능만 바뀌는 코드가 존재할 경우 전략패턴을 사용해 보자
  • 템플릿/콜백 패턴 자주 변경되는 부분과 자주 변경되지않는 부분을 나눠서 전략패턴 + 익명 클래스를 활용한 방식 전략 패턴의 컨텍스트를 템플릿이라 하고, 익명 내부클래스는 콜백이라고 한다.

제어권
함수의 코드나 프로세스의 실행 흐름을 제어할 수 있는 권리
OS의 커널에서 따온 개념으로 I/O동작에서 설명하는 부분


[참고]

이펙티브 자바 - 아이템1

https://jeong-pro.tistory.com/205

https://medium.com/@greekykhs/springsecurity-part-3-spring-security-flow-7da9cc3624ab

0개의 댓글