[토비의스프링] 1-5 스프링의 IoC

2022. 3. 30. 00:30·Spring Framework/Spring

스프링의 IoC

스프링의 핵심을 담당하는 건, 바로 빈 팩토리 또는 애플리케이션 컨텍스트라고 불리는 것이다.

스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리bean factory라고 부른다.
보통 빈 팩토리보다는 이를 좀 더 확장한 애플리케이션 컨텍스트application context를 주로 사용한다.

기존 DaoFactory 코드에는 설정정보, 예를 들어 어떤 클래스의 오브젝트를 생성하고 어디에서 사용하도록 연결해줄 것인가 등에 관한 정보가 평범한 자바 코드로 만들어져 있다.

애플리케이션 컨텍스트는 직접 이런 정보를 담고 있진 않다.
대신 별도로 설정정보를 담고 있는 무엇인가를 가져와 이를 활용하는 범용적인 IoC엔진 같은 것이라고 볼수 있다.

오브젝트 설정 방법

  • 스프링이 빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식할 수 있도록 @Configuration이라는 애노테이션을 추가한다.
  • 그리고 오브젝트를 만들어주는 메소드에는 @Bean이라는 애노테이션을 붙여준다.

스프링은 지금 우리가 구현했던 DaoFactory를 통해서는 얻을 수 없는 방대한 기능과 활용 방법을 제공해준다.
애플리케이션 컨텍스트를 이용하면 일관된 방식으로 원하는 오브젝트를 가져올 수 있다.

오브젝트 팩토리가 아무리 많아져도 이를 알아야 하거나 직접 사용할 필요가 없다.
애플리케이션 컨텍스트를 이용하면 일관된 방식으로 원하는 오브젝트를 가져올 수 있다.

DaoFactory가 UserDao를 비롯한 DAO 오브젝트를 생성하고 DB 생성 오브젝트와 관계를 맺어주는 제한적인 역할을 하는 데 반해,
애플리케이션 컨텍스트는 애플리케이션에서 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계설정을 담당한다.
대신 ApplicationContext에는 DaoFactory와 달리 직접 오브젝트를 생성하고 관계를 맺어주는 코드가 없고, 그런 생성정보와 연관관계 정보를 별도의 설정정보를 통해 얻는다. 때로는 외부의 오브젝트 팩토리에 그 작업을 위임하고 그 결과를 가져다가 사용하기도한다.

애플리케이션 컨텍스트를 사용했을 때 얻을 수 있는 장점

  1. 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다
    • 애플리케이션 컨텍스트를 사용하면 오브젝트 팩토리가 아무리 많아져도 이를 알아야 하거나 직접 사용할 필요가 없다.
    • 애플리케이션 컨텍스트를 이용하면 일관된 방식으로 원하는 오브젝트를 가져올 수 있다.
  2. 애플리케이션 컨텍스트는 종합 IoC 서비스를 제공해준다
    • 오브젝트가 만들어지는 방식, 시점과 전략을 다르게 가져갈수도 있고, 이에 부가적으로 자동생성, 오브젝트에 대한 후처리, 정보의 조합, 설정방식의 다변화, 인터셉팅 등 오브젝트를 효과적으로 활용할 수 있는 다양한 기능을 제공한다.
  3. 애플리케이션 컨텍스트는 빈을 검색하는 다양한 방법을 제공한다
    • getBean( ) 메소드는 빈의 이름을 이용해 빈을 찾아준다.
    • 타입만으로 빈을 검색하거나 특별한 애노테이션 설정이 되어 있는 빈을 찾을 수도 있다.
저작자표시 (새창열림)

'Spring Framework > Spring' 카테고리의 다른 글

WebMvcConfigurer  (0) 2022.04.18
[토비의스프링] 1-7 의존관계 주입 DI  (0) 2022.03.30
[토비의스프링] 1-6 싱글톤 레지스트리와 오브젝트 스코프  (0) 2022.03.30
[토비의스프링] 1장 오브젝트와 의존관계 - DAO(1)  (0) 2022.03.16
컨트롤러, form action경로 설정  (0) 2022.03.02
'Spring Framework/Spring' 카테고리의 다른 글
  • [토비의스프링] 1-7 의존관계 주입 DI
  • [토비의스프링] 1-6 싱글톤 레지스트리와 오브젝트 스코프
  • [토비의스프링] 1장 오브젝트와 의존관계 - DAO(1)
  • 컨트롤러, form action경로 설정
devstep
devstep
웹 백엔드 개발자
  • devstep
    개발 여정
    devstep
  • 전체
    오늘
    어제
    • 분류 전체보기 (92) N
      • Java (24)
      • Spring Framework (17)
        • Spring (14)
        • JPA (3)
      • Database (8)
        • RDBMS공통 (1)
        • MySQL (6)
        • Redis (0)
        • Oracle (1)
      • Concept (13)
        • 테스트코드 (4)
        • 클린코드 (2)
        • 성능테스트 (4)
        • 설계 (1)
        • 인증 (1)
        • REST API (1)
      • git (2)
      • Intellij (4)
      • Computer Science (3)
        • 네트워크 (1)
        • 자료구조 (1)
        • 보안 (1)
      • Essay (18)
        • Learning Essay (10)
        • WIL (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ClusteredIndex
    JavaMemoryModel
    부하테스트도구
    seed
    nofile
    aggregate
    단위테스트
    JMeter
    tdd
    클린코드
    테스트코드
    springsecurity
    linux
    nginx
    자바메모리모델
    블록암호화
    innodb
    보안
    대칭암호화
    인텔리제이실행에러
    부하테스트
    비대칭암호화
    bean
    성능테스트
    JVM
    storageEngine
    component
    applicationcontext
    DDD
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devstep
[토비의스프링] 1-5 스프링의 IoC
상단으로

티스토리툴바