spring - IoC

yeong ·2023년 2월 12일
0

spring

목록 보기
5/8

IoC(Inversion Of Control)

  • 제어의 역행 Container을 통해 객체를 제공하여 객체간의 결합도를 떨어뜨릴 수 있음

객체결합과 유지보수성

  • 결합도 : 소프트웨어 코드의 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지를 나타냄 -> 한 객체 안에서 다른 객체의 메소드를 호출하거나 멤버 변수에 접근할 때 두 객체가 연결되어 있다는 것임
  • 클래스의 결합과 유지보수성의 관계
    클래스가 결합되어 있다는 건 결합되어 이용하고 있는 클래스가 유지보수될 때 그 클래스와 결합되어 있는 다른 클래스도 같이 유지보수도어야 할 가능성이 아주 높다는 것임
    클래스의 결합이 심하면 심할수록 유지 보수해야 하는 곳이 많아지고 이는 유지보수성을 헤치게 됨
  • 결합도 떨어뜨리기
    다형성을 이용한 결합도 떨어뜨리기
    Container를 이용한 결합도 떨어뜨리기

Container : 객체의 생성,운용,소멸 등의 객체의 라이프사이클 관리를 담당함

  • Container의 중요한 기능
    1.Lifecycle Management     2.Configuration
    3.Lookup     4.Denpendency Resolution
  • Container의 필요성
    컴포넌트/오브젝트의 자유로운 삽입(Pluggability)이 가능하도록 하기 위한 Calling Code의 독립성 때문임
    서비스의 lookup이나 configuration이 일관성을 갖도록 하기 위함
    단일화된 서비스의 접근방법을 제공하기 위함
    비지니스 오브젝트의 부가적으로 필요로 하는 각종 Enterprise Service를 제공하기 위해서임
  • EJB(Enterprise JavaBeans):엔터프라이즈 어플리케이션 개발을 단순화하고자 하는 객체
  • IoC:Container 기능이 됨
  • lightWeight Container
    일반 Container처럼 어플리케이션 코드를 관리해 주지만 그 코드 내에 Container에 대한 의존적인 부분들이 필요 없도록 해줌 -> Container를 알지 못하는 오브젝트 또는 알 필요도 없는 오브젝트를 가능하게 해준다는 것임

Denpendency 관리

  • Ioc 구현 방법
    Denpendency Lookup : lookup context를 이용해서 필요한 리소스나 오브젝트를 얻는 방식
    Denpendency Injection : Container가 직접 의존구조를 오브젝트에 설정할 수 있도록 해주는 방법

Ioc Container

  • Spring의 가장 기본적인 기능은 Container기능이라 할 수 있음
    어떤 객체를 생성부터 소멸까지 Life Cycle을 관리해주는 역할
    Container에서 어떤 Service를 제공해주는 역할
  • Factory Pattern
    GoF의 디자인 패턴 중 하나로써,서로 다른 객체를 공통의 인터페이스를 이용하여 생성함으로써 그 객체를 이용하는 코드에서 생성 객체에 직접 결합되지 않게 하려는 것
    객체지향 프로그램을 하다 보면 상황에 따라 반환 가능한 여러 가지 객체들 중 하나의
    객체를 생성하여 반환시켜 주는 클래스를 만나게 됨
  • 클래스와 결합을 없앨 수 있는 방법
    객체를 누군가 대신 생성해준다면 결합을 줄여줌으로써 이용하고자 하는 곳에서 실제 이용 클래스와의 결합을 모두 없앨 수 있음
  • Factory 클래스
    객체를 대신 생성해서 이용하고자 하는 곳에 넘겨주는 역할을 하는 것
    객체를 생성하여 리턴시킴으로 이용하고자 하는 곳에서는 실제 어느 객체가 생성되는지 신경 쓰지 않고 모두 동일타입으로 이용이 가능해짐

BeanFactory와 ApplicationContext

  • Spring Containe
    Spring Framework에서 Container기능을 제공해주는 클래스로 Container객체 또는 Factory객체라고 부름
    Spring Framework의 초기화 역할을 담당함
    Spring Container은 아래의 두 가지 유형Container를 제공함
    • BeanFactory: BeanFactory인터페이스로 정의,기본적인 의존성 주입을 지원하는 가장 간단한 형태의 Container
    • ApplicaionContext: ApplicaionContext인터페이스로 정의됨,
      어플리케이션 프레임워크 서비스를 제공하는 빈 팩토리의 개념 위에 구현된 Container

Spring 설정파일

  • Spring에서 XML설정 파일이 가장 중요한 이유
    간단하게 XML설정 파일 수정만으로도 유지보수작업을 가능하게 만들어주기 때문임
  • 여러 개의 XML파일을 이용하여 설정하는 이유
    Spring설정 파일에 모든 Bean들을 등록시키고 다양한 설정을 하면 XML파일이 너무 길게 작성되기 떄문에 관리의 효율성을 위해 여러 XML 파일로 나누어 설정하는 것이 효율적임
  • Spring Bean
    Spring Framework에 등록되어 Spring Framework에 의해 Life cycle관리가 되는 클래스
    Spring이 EJB와 비교가 많이 되는데 EJB에서 이야기 하는 Bean에 비해 Spring Bean은 POJO 클래스로 작성됨
  • Spring에서 Spring Bean 이용 방법
    XML파일에 등록시켜 놓고 사용해야 하는데 이때 사용되는 태그가 태그임
    -> 태그로 등록된 클래스는 이제 Spring IoC에 의해 객체가 생성되고 관리됨

Bean객체의 초기화

  • Spring Container : 객체를 생성하는 순간,XML설정파일에 등록된 Bean 객체들이 초기화됨
    • BeanFactory : BeanFactory객체가 생성되는 시점에 Bean객체를 생성하지 않음
      실제 해당 Bean이 사용될 시점에 객체를 초기화시킴
    • ApplicationContext
      다양한 기능을 사용할 수 있음
      Container초기화 시점에 모든 Bean을 초기화시키고 사용함

Spring Bean의 Life Cycle

  • Bean의 Life Cycle : Bean의 생성부터 소멸까지 일련의 주기
  • Container는 Bean 객체의 Life Cycle을 관리해 줌

    -Servlet Container : Servlet객체의 Life Cycle관리
    -EJB Container : EJB객체의 Life Cycle관리
    servlet보다 훨씬 더 복잡한 단계를 거침

Bean Lift Cycle 응용

  • BeanPostProcessor : 어떤 Bean이 초기화 되기 전후에 수행할 로직을 가지는 다른 클래스를 위한 것
  • BeanFactoryPostProcessor : 별도의 BeanFactoryPostProcessor를 구현한 클래스를 만들고 해당 클래스를 으로 등록시키면 Spring Framwork에 의해 XML 파일이 읽힌 후 호출됨
  • PropertyPlaceholderConfigure : 이용하면 .properties 파일에 key=value로 등록한 값을 XML 파일에서 key값만 명시해서 value 값을 적용시킬 수 있음

Bean 객체의 Scope

  • Scope 설정 : Bean을 생성해주는데,몇 개의 Bean이 생성되어 어느 범위 내에서 사용 가능한지를 지정하는 것
  • Singleton Scope : 해당 Bean이 Spring Framework에 의해 단 하나만 생성되어 운용될 경우 설정함
  • Property Scope : 해당 Bean이 이용될 때 마다 매번 객체를 생성해 줌

Bean Factory

  • Annotation을 사용하여 Bean을 정의하면,XML 설정 파일에 따로 Bean정의를 명시하지 않아도 Spring Container가 Bean을 인식하고 관리할 수 있음

0개의 댓글