spring study _ 스프링의 3대 요소

도연·2023년 5월 17일
0

_moyeon_spring-summarize

목록 보기
1/2
  1. IOC (Inversion of Control) '제어의 역전'
    : 객체의 생성 , 생명주기 관리에 대한 제어권을 스프링이 갖는 것
  • 일반적으로 자바에서 객체를 생성할 때 new 키워드로 생성자 함수를 호출하여 객체를 생성
class OwnerController {
	private OwnerRepository repository = new OwnerRepository();

이와 같은 경우는 의존성에 대한 제어권이 사용하는 클래스 , 즉 내가 사용할 의존성을 내가 만들었다 할 수 있다.

  • 스프링의 경우는 내가 의존성을 생성하는 것이 아닌 누군가(spring Ioc Container)에 의해 주입받는 것이 가능하다. = '제어의 역전'
class OwnerController {
	private OwnerRepository repo;
    
    public OwnerController(OwnerRepository repo) {
    	this.repo = repo;
    }
 }
 
 class OwnerControllerTest {
 	@Test
    public void create() {
    	OwnerRepository repo = new OwnerRepository();
        OwnerController controller = new OwnerController(repo);
	}
}
  • 위 코드를 살펴보면 OwnerController에서 사용할 repository를 OwnerController가 직접 생성해서 사용하는 것이 아닌 OwnerControllerTest 클래스에서 객체를 생성해서 parameter로 OwnerController 클래스가 넘겨 받는다.
    이런 경우를 생성자를 이용한 'DI(Dependenct Injection) = 의존성 주입'이라 함

여기서 객체를 생성해 주는 역할을 하는 것이 IoC Container이다.

위와 같은 경우는 개발자가 직접 테스트에서 IoC Container에 객체 의존관계를 외부에서 직접 주입한 경우이고 spring에서 @Autowired 어노테이션을 활용하면 연관된 객체를 IoC Container에 찾아서 넣어준다.

의존성 주입(DI)에는 위처럼 생성자를 이용한 방법과 Filed 변수에 주입하는 하는 법 setter 메소드를 이용하여 주입하는 방법이 있다.

  • 필드 주입 방법
@Autowired
private OwnerService OService;
  • setter 주입 방법
private OwnerService OService;

@Autowired
public void setOService(OwnerService OService){
	this.OService = OService;
}

setter 주입 방법은 주입 받으려는 빈의 생성자를 호출하여 빈을 찾거나 빈 팩토리에 등록 후 생성자 인자를 사용하는 빈을 찾아 생성하고 주입하려는 빈 객체의 수정자를 호출하여 주입한다.

필드 주입과 setter 주입 방법은 런타임에서 의존성을 주입하기 때문에 의존성을 주입하지 않아도 객체가 생성될 수 있다.

스프링에서는 필드주입과 , setter 주입 보다는 생성자 주입을 권고하는데 그 이유로는

1-2 IoC Container
: 객체를 생성, 관리, 의존성에 관련된 일을 해주는 컨테이너

  • 객체의 생성을 책임지고 의존성 관리를 함
  • pojo의 생성, 초기화, 서비스, 소멸에 대한 권한을 가짐
    (pojo : 특정 자바 모델이나 기능, 프레임워크를 따르지 않는 Java Object 지칭 ex) java Bean
    java bean : IoC 컨테이너가 관리하는 객체)
  • 객체 생성 코드가 없어지므로 TDD 용이

** TDD

DI , Depndency Injection : 의존성 주입
각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결

  1. AOP, Aspect Oriented Programming : 관점 지향 프로그래밍

스프링의 DI가 의존성 주입이라면 AOP는 코드 주입
주요 기능과 핵심 기능 구현을 위한 부가적인 기능 구현을 분리하여 각각의 관점별로 묶어서 개발하는 형식

profile
모연

0개의 댓글