Spring - DI , IOC

CYSSSSSSSSS·2024년 4월 21일
0

스프링

목록 보기
14/16

Spring

DI(Dependency Injection) , IOC(Inversion of Control)

IOC?

  • 프로그램의 흐름을 개발자가 아닌 프레임워크에서 관리하는 것을 의미한다.
  • 객체의 생명을 생명주기 관리를 프레임워크가 담당하는것으로 개발자는 로직에 더욱 집중할 수 있게 해준다.
  • 스프링에서는 Application Context가 담당해준다.
  • Application Context는 Bean이라고 하는 객체들의 생성,설정,관리를 담당합니다.
  • 코드의 재사용성과 유지보수성을 향상시키며, 개발자가 객체 간의 의존성을 직접 관리하지 않아도 되는 매우 편리한 기능이다.

DI

  • 객체 간의 의존성을 외부에서 주입하는 방식을 말한다.
  • 객체가 필요로 하는 의존객체를 직접 생성하지 않고 외부에서 생성된 객체를 직접 주입받아 사용한다.
  • @Autowired를 이용하여 의존성 주입을 쉽게 구현할 수 있다.
  • 객체간의 결합도를 낮추고 코드의 유연성을 높일 수 있다.

Bean

자바에서 Bean

  • 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따르는 구조체
  • private 프로퍼티와 getter/setter로만 데이터를 접근한다.
  • 단순하게 데이터를 저장하기 위한 용도로만 사용하는 단순한 구조체를 자바에서 Bean이라고 한다.
public class JavaBean {
	private String id;
	private Integer count;

	public JavaBean(){}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {
		this.count = count;
	}
}

스프링에서 Bean

  • 스프링은 IOC 컨테이너에 의해 생성되고 관리되어 있는 객체이다.

  • 자바에서 처럼 new를 사용하여 생성하지 않는다.

  • 각각의 Bean끼리 서로를 편리하게 의존하면서 사용할 수 있다.

  • 사용자가 만든 클래스를 Bean으로 등록하겠다고 하면 스프링 컨테이너 안에 등록이 되고 Spring Application Context안에 Bean이 등록이 되고 우리가 만든 클래스를 실체 인스턴스로 스프링에서는 단일 객체로 인스턴스화를 시켜준다.

  • Spring Application Context가 가지고 있는 설정으로 개발자가 직접 만든 클래스에 적용 시켜준다.

  • 어노테이션으로 해당 빈의 역할을 명시해준다 @Bean , @Controller , @Service

  • Bean 등록시에는 기본적으로 첫 문자만 소문자 -> accountService

  • Bean을 생성하는 규칙을 Scope라고 한다.

    • Singleton: 컨테이너가 단일로 생성
    • prototype: 작업시마다 Bean을 새로 생성하고 싶은 경우
    • request: Http 요청시마다 새롭게 Bean을 생성하고 싶은 경우

BeanLifeCycle callback(빈 생명주기 콜백 함수)

  • 어떤 이벤트가 발생할 경우 호출되는 메서드
  • ex) 빵을 구매할려고 했을때 빵에 재고가 떨어진 경우 -> 해당 행동을 취해라
  • Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수를 LifeCycle Callback이라고 한다.
  • 주로 빈을 생성하는 @PostConstruct / 빈을 파괴하는 @PreDestroy(주로 어플리케이션 종료시점)
  • 자원의 소모가 클 경우 콜백 함수를 사용하는 것이 좋다.(PostConstruct)
  • 어플리케이션의 종료때는 PreDestroy를 활용한다.
profile
개발자 되고 싶어요

0개의 댓글