스프링 핵심 원리 - 기본편1

2021. 8. 14. 09:00· FRAMEWORK/[SPRING]
목차
  1. 1. 생성자 주입
  2. 2. 의존관계 주입 (DI : Dependency Injection)
  3. 2.1 정적인 의존관계
  4. 2.2 동적인 의존관계
  5. 3. 제어의 역전 (IoC : Inversion of Control)
  6. 4. IoC컨테이너 DI컨테이너
  7. 4.1 컨테이너
  8. 5. 스프링 컨테이너
  9. 5.0 BeanFactory vs ApplicationContext
  10. 5.1 스프링 빈
  11. 5.2 스프링 컨테이너의 생성 과정
  12. 5.3 컨테이너에 등록된 빈 조회

스프링 핵심 원리 - 기본편1

아래 글은 김영한님의 인프런 강의를 참고해서 만들었습니다.

 

1. 생성자 주입

  • 생성자를 통해 외부객체를 주입(연결)하는 방법. -> 책임을 나눠 갖는다.
  • 객체를 생성하고 연결하는 역할과 실행하는 역할이 명확히 분리시킬수 있다(DIP가 성립)



2. 의존관계 주입 (DI : Dependency Injection)

  • 애플리케이션 실행 시점에 외부에서 생성된 실제 구현 객체를, 클라이언트와 서버의 실제 의존관계가 연결 되는 것을 의미
  • 하나의 객체가 다른 객체의 의존성을 제공
  • 정적인 클래스 의존관계의 변경 없이, 동적인 객체 인스턴스 의존관계를 변경 가능

 

2.1 정적인 의존관계

  • 애플리케이션을 실행하지 않아도 의존관계를 쉽게 판단 가능
  • ex) 클래스 다이어그램

 

2.2 동적인 의존관계

  • 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
  • ex) 객체 다이어그램



3. 제어의 역전 (IoC : Inversion of Control)

  • 원래는 구현 객체가 프로그램의 제어 흐름을 조종 -> 개발자 입장에서는 자연스러운 흐름(but OCP, DIP 위반)
  • 프로그램의 제어 흐름을 외부에서 관리하는 것(IoC)



4. IoC컨테이너 DI컨테이너

  • 의존관계를 역전 시켜주는 컨테이너를 IoC 컨테이너, DI 컨테이너라고 한다.

 

4.1 컨테이너

  • 사전적으로 그릇과 같은 무언가를 담는 용기를 말하는데, 스프링에서는 객체관리를 주로 수행하는 도구라고 생각하면 된다.



5. 스프링 컨테이너

  • 스프링 빈을 생성하고 관리하는 컨테이너(@Configuration을 설정 정보로 사용)
  • ApplicationContext를 스프링 컨테이너이자 인터페이스이다.
  • ※ BeanFactory도 스프링 컨테이너이지만 직접 사용하지 않는다.
  • ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);로 스프링 컨테이너 생성
    • 단, AppConfig.class는 설정 정보를 가지고 있는 클래스로 이것을 참고하여 의존관계 주입(DI)를 한다.
    • Appconfig.class에서는 설정을 구성한다는 뜻의 @Configuration 어노테이션을 붙여주고, 각 메서드에 @Bean을 붙여주어야 스프링 빈으로 등록된다.

 

5.0 BeanFactory vs ApplicationContext

  • BeanFactory
    • 스프링 컨테이너의 최고 인터페이스이고, 스프링 빈을 관리하고 조회하는 역할을 한다.
    • getBean() 메서드를 제공
  • ApplicationContext
    • BeanFactory의 기능을 모두 상속받아서 제공하고 더 많은 기능들을 가지고 있다.

5.1 스프링 빈

  • @Bean이 붙은 메서드, 메서드 명을 스프링 빈의 이름으로 사용(@Bean(name = "이름")으로 설정할 수 도 있다.)
  • ※ 빈 이름은 항상 다른 이름으로 부여해야 오류가 발생하지 않는다.
  • applicationContext.getBean("이름", 반환타입.class);으로 스프링 빈을 찾을 수 있음

 

5.2 스프링 컨테이너의 생성 과정

  1. 스프링 컨테이너 생성

  1. 스프링 빈 등록

  1. 스프링 빈 의존관계 설정 - 준비

  1. 스프링 빈 의존관계 설정 - 완료

5.3 컨테이너에 등록된 빈 조회

  1. 모든 빈 조회
  • ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름들을 조회
  • ac.getBean() : 빈 이름으로 빈 객체(인스턴스)를 조회
    • ac.getBean(빈이름, 타입), ac.getBean(타입)으로 사용. 조회하는 빈이 없으면 예외(NoSuchBeanDefinitionException)발생
    • ac.getBean(타입)으로 조회할 때 같은 타입의 스프링 빈이 2개 이상이면 예외(NoUniqueBeanDefinitionException)가 발생 → 빈 이름을 지정
    • ac.getBeansOfType(타입) : 특정 타입 모두 찾기
  1. 애플리케이션 빈 출력하기
  • beanDefinition.getRole()을 사용하여 구별
    • BeanDefinition.ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
    • BeanDefinition.ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈

 

  1. 상속관계
  • 부모 타입으로 조회하면, 자식 타입도 함께 조회된다.
    • 즉, Object 타입으로 조회하면, 모든 스프링 빈으로 조회할 수 있다.

 

 

저작자표시 (새창열림)

'FRAMEWORK > [SPRING]' 카테고리의 다른 글

[Spring] HttpMessageConverter  (0) 2022.06.06
[Spring] Spring MVC 구조  (0) 2022.06.05
[Spring] CGI vs Servlet  (0) 2022.06.03
[Spring] Web Server vs WAS  (0) 2022.06.02
스프링 핵심 원리 - 기본편2  (0) 2021.08.23
  1. 1. 생성자 주입
  2. 2. 의존관계 주입 (DI : Dependency Injection)
  3. 2.1 정적인 의존관계
  4. 2.2 동적인 의존관계
  5. 3. 제어의 역전 (IoC : Inversion of Control)
  6. 4. IoC컨테이너 DI컨테이너
  7. 4.1 컨테이너
  8. 5. 스프링 컨테이너
  9. 5.0 BeanFactory vs ApplicationContext
  10. 5.1 스프링 빈
  11. 5.2 스프링 컨테이너의 생성 과정
  12. 5.3 컨테이너에 등록된 빈 조회
'FRAMEWORK/[SPRING]' 카테고리의 다른 글
  • [Spring] Spring MVC 구조
  • [Spring] CGI vs Servlet
  • [Spring] Web Server vs WAS
  • 스프링 핵심 원리 - 기본편2
쿠엔크
쿠엔크
우아한테크코스 5기 BE 에단 Github : https://github.com/cookienc
쿠엔크
기러기는 기록기록
쿠엔크
전체
오늘
어제
  • 분류 전체보기 (132)
    • CS (46)
      • [OS] (12)
      • [NETWORK] (10)
      • [DATABASE] (11)
      • [BASIC CONCEPT] (1)
      • [DATA STRUCTURE] (7)
      • [ALGORITHM] (5)
    • LANGUAGE (17)
      • [JAVA] (17)
    • DESIGN_PATTERN (2)
    • FRAMEWORK (18)
      • [SPRING] (18)
    • ORM (11)
      • JPA (11)
    • AWS (7)
    • BOOK (10)
      • [자바 웹 개발 워크북] (3)
      • [이펙티브 자바] (7)
    • 개발 (19)
      • [오류] (7)
      • [고민] (1)
      • [우테코] (10)
      • [iTracker] (1)
    • Tip (1)
      • [Plugins] (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 오류
  • 알고리즘
  • CORS
  • Spring
  • JVM
  • 운영체제
  • 개념
  • 네트워크
  • 데이터베이스
  • aws
  • ArgumentResolver
  • 가비아
  • java
  • 스프링
  • 자바 웹 개발 워크북
  • Effective Java
  • HTTP
  • 자료구조
  • JPA
  • 디자인 패턴

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
쿠엔크
스프링 핵심 원리 - 기본편1

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.