1. Spring이란?
- 스프링은 자바의 오픈소스 애플리케이션 프레임워크 중 하나로 객체를 관리할 수
있는 컨테이너를 제공하고 객체지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크
- 컨테이너를 통해서 의존성 주입과 제어의 역전을 통해 결합도를 낮추게 한다.
2. Spring의 주요 특징
1. IOC (제어의 역전)
- IOC란 객체를 개발자가 관리하는 것이 아닌 스프링에서 대신 관리합니다.
- 제어권이 개발자에게 있지 않고 프레임워크에 있어서 제어의 역전이라고 합니다.
- 이로인해 개발자는 비즈니스 로직에 집중하여 개발할 수 있습니다.
2. DI (의존성 주입)
- DI는 스프링 컨테이너가 객체간의 의존관계를 자동으로 연결하는 방식.
- 이를 통해 코드의 재사용성을 높일 수 있습니다.
3. AOP (관점 지향 프로그래밍)
- AOP는 애플리케이션에 적용되는 공통 기능을 분리하여 관리하는 방식.
- 여러개의 클래스가 있다고 가정을 하겠습니다. 각 클래스들은 주요 기능들이 서로 중복되는 부분이 많습니다. 코드가 중복될 경우 가독성 및 효율에 좋지않기에 중복되는 코드를 최대한 따로 정의하여 필요할때만 호출하여 쓰는 프로그래밍 기법입니다.
4. POJO
- POJO란 순수 Java를 통해서 생성된 객체를 의미합니다.
- POJO는 특별한 클래스를 상속받지 않기때문에 유연하고 가볍습니다.
- getter/setter를 가진 단순한 자바 오브젝트.
3. 의존성 주입(DI) 방법 3가지
1. 생성자 주입
- 생성자 호출 시점에 1번만 호출 (불변성 확보)
- 객체 생성과 의존관계 주입이 동시에 일어난다.
- 생성자가 1개인 경우 @Autowired를 생략 가능
@Component
public class MyService {
private final MyRepository myRepository;
@Autowired
public MyService(MyRepository myRepository) {
this.myRepository = myRepository;
}
}
2. setter 주입
- final을 사용하지 못하고 setter메서드에 @Autowired를 사용해서 의존관계 주입
- 객체생성후 의존관계를 주입한다.
- 선택과 변경 가능성이 있는 의존관계에 사용한다.
@Component
public class MyService {
private MyRepository myRepository;
@Autowired
public void setMyRepository(MyRepository myRepository) {
this.myRepository = myRepository;
}
}
3. 필드 주입
- 코드가 간결해지는게 장점이다.
- 클래스 외부에서 접근을할 수 없어서 테스트하기에 어렵다.
- DI 프레임워크가 없으면 사용할 수 없다.
@Component
public class MyService {
@Autowired
private MyRepository myRepository;
}
생성자 주입을 사용하자!
- 생성자 주입은 프레임워크에 의존하지 않기때문에 순수한 자바 코드로 구현이 가능하고, final을 사용해 불변성을 보장받을 수 있어서 생성자 주입 방식을 권장.
4. Spring과 Spring Boot의 차이점
-Spring boot는 개발자가 더 쉽고 빠르게 애플리케이션을 개발할 수 있도록 하기위해 개발되었다.
1. 스프링부트는 기본적인 설정(Auto-Configuration)을 자동으로 처리해줘서 간단하다.
2. 스프링부트는 내장된 서버를 제공하여 별도의 내장 Tomcat 설정이 필요없다.
3. dependency 의존성 관리가 쉽다.