hyunjungkimm / spring_core_basic

0 stars 0 forks source link

Spring #1

Open hyunjungkimm opened 6 months ago

hyunjungkimm commented 6 months ago

스프링부트

스프링의 핵심

객체 지향

특징

1. 추상화

2. 캡슐화

3. 상속

4. 다형성

역할과 구현을 분리

객체 지향 프로그래밍

스프링과 객체 지향

좋은 객체 지향 설계의 5가지 원칙 (SOLID)

SRP : 단일 책임 원칙(Single responsibility principle)

Spring DI

hyunjungkimm commented 6 months ago

관심사의 분리

문제점

1. DIP 위반 - 추상화에만 의존해야하는데 구체화에도 의존하고 있다.

2. OCP 위반 - 현재의 코드는 기능을 확장하려고 변경하면, 클라이언트 코드에 영향을 준다.

orderServiceImpl 코드를 변경해야 한다.

image

문제 해결 방법 - 관심사의 분리

객체의 생성과 연결하는 역할(구성영역 - AppConfig)과 실행하는 역할(사용영역)의 명확한 분리

의존관계를 외부에서 주입해주는 것 같다고 해서 DI(Dependency Injection) - 의존관계 주입, 의존성 주입. DIP - 의존 관계 역전 원칙

제어의 역전 (IoC, Inversion Of Control)

프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것

프레임워크 vs 라이브러리

의존관계 주입(DI, Dependency Injection)

IoC 컨테이너, DI 컨테이너

hyunjungkimm commented 6 months ago

스프링 컨테이너

image

스프링 컨테이너 생성 과정

1. 스프링 컨테이너 생성

image

2. 스프링 빈 등록

image

3. 스프링 빈 의존관계 설정

image

스프링 빈 설정 정보 - BeanDefinition

image

hyunjungkimm commented 6 months ago

싱글톤 컨테이너

싱글톤 패턴

생성 이유

싱글톤 컨테이너 = 스프링 컨테이너

@Configuration

hyunjungkimm commented 6 months ago

컴포넌트 스캔

@ComponentScan

스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록

컴포넌트 스캔 기본 대상

필터

중복등록과 충돌

@Autowired : 자동 의존관계 주입

hyunjungkimm commented 6 months ago

의존관계 주입

생성자 주입을 권장하는 이유

  1. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다.
  2. 생성자 주입을 사용하면 필드에 final 키워드를 사용할 수 있어서 생성자에서 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아준다.
    • 수정자 주입을 포함한 나머지 주입 방식은 모두 생성자 이후에 호출되므로, 필드에 final 사용할 수 없다. 오직 생성자 주입 방식만 final 키워드를 사용할 수 있음

@RequiredArgsConstructor

2. 수정자 주입(setter 주입)

조회 대상 2개일 때 해결 방법

1. @Autowired 필드 명 매칭

  1. 타입 매칭 2. 타입 매칭의 결과가 2개 이상일 때 필드명, 파라미터 명으로 빈 이름 매칭
    • 먼저 타입 매칭을 시도 하고 그 결과에 여러 빈이 있을 때 추가로 동작하는 기능임

2. @Qualifier

3. @Primary 사용

실무에서 자동, 수동 운영

편리한 자동 기능을 기본으로 사용하자

직접 등록하는 기술 지원 객체는 수동 등록

애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나눌 수 있음

hyunjungkimm commented 6 months ago

빈 생명주기 콜백

객체의 초기화, 종료 작업

스프링 빈의 라이프사이클

스프링 빈의 이벤트 라이프사이클 (싱글톤)

스프링 - 빈 생명주기 콜백 3가지 방법

1. 인터페이스 (InitializingBean, DisposableBean)

hyunjungkimm commented 6 months ago

빈 스코프

빈이 존재할 수 있는 범위

스프링 스코프

1. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프

2. 프로토타입 : 빈의 생성과 의존관계 주입, 초기화까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프

프로토 타입 스코프 - 싱글톤 빈과 함께 사용시 문제점

프로토 타입 스코프 - 싱글톤 빈과 함께 사용시 문제 해결법 = Provider

3. 웹 관련 스코프

웹 환경에서만 동작하고, 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출됨.