Spring Framework

HEUKWU·2023년 2월 12일
0

DI

DI (Dependency Injection)

의존성주입이라고 하는데 먼저 의존성에 대한 뜻부터 알아볼 필요가 있다.

먼저 의존한다는 것은 한 클래스에서 다른 클래스를 사용하는 것이다.

class A {

	private B b;
    
	public A() {
    	b = new B();
    }
    
}

클래스 A는 호출될때 생성자를 통해 B객체를 생성한다.
이때 만약 B클래스에 변화가 생겼다면 B클래스를 갖고 있는 A클래스도 당연히 함께 수정해야한다. 이렇게 설계를 하면 코드의 재사용성도 떨어지고 유지보수에 어려움이 생긴다.

따라서 이러한 의존성을 외부에서 주입해줌으로써 객체 간의 결합도도 줄이고 유지보수에 용이한 설계를 할 수 있다.

스프링 프레임워크에서 의존성을 주입하는 방법에는 크게 네가지가 있다.

  • 생성자 주입
  • setter 주입
  • 필드 주입
  • 일반 메서드 주입

생성자 주입

생성자 주입은 말 그대로 생성자를 통해서 의존관계를 주입받는다.
특징으로는 생성자 호출 시점에 한번만 호출되는 것이 보장된다. 따라서 한번 세팅된 값을 수정하지 못하게 막을 수 있다. 또한 final제어자를 활용해 생성자를 통해 무조건 값을 주입받도록 할 수 있다. 따라서 불변, 필수 의존관계에 사용한다.
(생성자가 딱 1개만 있다면 @Autowired를 생략할 수 있다.)

setter 주입

setXxx 메서드를 사용해 의존관계를 주입하는 방법이다.
특징으로는 선택, 변경 가능성이 있는 의존관계에 사용한다.

필드 주입

이름 그대로 필드에 바로 주입하는 방법이다.
코드가 간결하고 깔끔하지만 값을 변경할 수 있는 방법이 없기 때문에 테스트하기 힘들다는 단점이 있다.
따라서 애플리케이션 실제코드와 관계없는 테스트 코드를 작성할 때 사용한다.

일반 메서드 주입

일반 메서드를 통해서 주입받는 방법이다.
특징으로는 한번에 여러 필드를 주입받을 수 있다. setter메서드 주입과 유사하다. 보통 생성자 주입과 setter 메서드 주입으로 해결이 가능하기 때문에 일반 메서드를 통해 주입받는 방법은 거의 사용하지 않는다.

IOC

IOC (Inversion Of Control)

기존의 스프링 프레임워크의 도움 없이 프로그램을 작성할 때는 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고 연결, 실행했다. 즉 프로그래머가 직접 프로그램의 제어 흐름, 생명 주기를 스스로 조종했다. 하지만 스프링 프레임워크를 사용하게 되면 객체의 생명 주기를 모두 프레임워크를 통하여 제어받는다. 이렇게 프로그램의 제어 흐름을 외부에서 관리해주는 것을 제어의 역전이라고 한다.

여기서 프레임워크와 라이브러리의 용어정리를 간단히 하자면, 프레임워크가 프로그래머의 코드를 대신 제어하고 실행하면 프레임워크가 맞다. 하지만 내가 직접 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리이다.

Bean

빈은 스프링 IOC컨테이너가 관리하는 자바 객체를 의미한다.
기존의 객체는 new 연산자를 사용해 객체를 생성했지만 스프링을 사용하면 스프링 컨테이너가 대신 생성해주고 관리해준다.

자바에는 어노테이션이라는 기능이 있는데 @Component라는 어노테이션을 사용하면 Bean을 스프링 IOC 컨테이너에 등록할 수 있다. 우리가 스프링 프레임워크를 사용해서 작성하는 프로그램에 사용하는 @Controller, @Service, @Repository 어노테이션을 보면 @Component 어노테이션을 포함하고 있는 것을 볼 수 있다.
따라서 스프링이 해당 어노테이션을 통행 자동으로 IOC 컨테이너에 등록시켜 준다.

0개의 댓글

관련 채용 정보