1. 스프링이 뭐임? == 스프링 코어가 뭐임?
==java의 오픈소스 어플리케이션 프레임워크 중 하나로 , 스프링 기본철학은 특정 기술에 종속되지 않고, 객체 관리할 수 있는 프레임워크를 제공하는 것입니다. 컨테이너로 자바 객체 관리하면서, 의존성 주입과 제어의 역전을 통해 결합도를 낮추게 됍니다.
- 객체 관리 컨테이너 제공하는 프레임워크
- 하나의 객체를 하나만 만들어서 여러곳에서 사용가능하게 핸들링하는게 컨테이너
- DI (dependency incention)
- == 의존성 주입 == 객체간의 의존관계를 연결해두면, 스프링 컨테이너가 의존관계를 자동으로 연결해 줍니다. 이렇게하면 직접 의존하는 객체를 생성하거나, 검색해서 가져올 필요 없어서, 결합도가 낮아지는 장점이 있습니다. 방법은 크게 생성자주입, 셋터주입, 필드주입 이 있습니다.
- B가 A에 의존한다 == B가 A를 사용한다 (A가 없으면 B사용못한다) == A를 B에 주입한다.
- ex. B에서 A를 가져와서 쓰고 싶을때, 컨테이너에 A등록, B에서 컨테이너에게 A요청을 컨테이너가 해줌
- 3가지 방법
- 생성자 주입 == 생성자 호출시점에 1번호출되는 것을 보장, 불변, 필수 의존관계에 사용
- setter 주입 == 메소드 매개변수 삽입, 선택, 변경 가능성 있는 의존관계에 사용하며 스프링 빈을 선택적으로 등록
- 필드 주입 == @Autowired 사용하는데 외부 변경 불가능하여 테스트 힘듬. 테스트 코드나 @configuration 같은 스프링 설정 목적 사용.
- IOC
- ==ioc는 inversion of control의 약자로 제어의 역전을 의미합니다.제어권이 사용자에게 있지 않고, 프레임워크에 있어서 필요에 따라서 사용자의 코드를 호출하게 됍니다. 스프링에서는 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너에서 대신 관리하게 됍니다.
- == 제어권이 사용자에게 있지 않고, 프레임워크에 있음
- 프레임워크는 전체 큰틀을 만들어두고 개발자는 특정 부분에 코드를 짜기만 하는것임. 그 코드를 짜는 과정에서 라이브러리를 가져다 쓰게됌. 컨테이너가 동작하는 큰 흐름에서 개발자는 특정 부분에 코드를 짜넣는것임.
- IoC컨테이너 == 앱 실행시점에 빈 오브젝트를 인스턴스화하고 DI 후 최초로 앱을 기동할 빈 하나 제공