[Spring] Spring이란?
개발자들의 봄이 왔다! Spring이란 ? - Spring은 Java 기반의 어플리케이션 프레임워크로, Java EE의 스펙을 구현한 EJB가 복잡하고 성능이 느린것을 탈피하고자 만들어진 오픈 소스 프레임워크이다. - EJ
dev-density.tistory.com
Spring IoC
IoC(Inversion of Control)
IoC란 Inversion of Control의 약자로 "제어의 역전"이라는 의미다.
역전이라는 단어는 이해하기 쉬워도 제어라는 단어는 이해하기 어렵다. 따라서 코드와 함께 이해해보자.
public class Person{
Calculator calculator = new Calculator();
calculator.add(3,4);
calculator.minus(4,3);
}
public class Calculator{
public int add(int x, int y){
return x+y;
}
public int minus(int x, int y){
return x-y;
}
}
위 코드를 보면 Person(사람) 클래스는 Calculator(계산기) 클래스를 호출해서 객체를 생성하고, 해당 객체의 메서드를 사용하고 있다.
이것은 달리 말하면 개발자가 직접 어떤 클래스의 라이프사이클을 제어한다는 의미이다.
자바 프로그램 또한 main() 메서드에서 시작해서 개발자가 미리 정한 순서를 따라 객체가 생성되고 실행된다.
서블릿을 생각해보면 서블릿을 개발해서 서버에 배포할 수는 있지만 배포하고 나서는 개발자가 직접 제어할 수 있는 방법은 없다.
대신 제어 권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스의 객체를 만들고 그 안의 메서드를 실행한다.
IoC: 작성한 메서드나 객체의 호출을 개발자가 결정하는 것이 아닌 외부(프레임워크)에서 담당하는 것
메서드나 객체의 호출을 프레임워크에서 결정하게 되면 객체의 라이프사이클 관리를 외부에서 맡아 하기 때문에 개발자는 온전히 비즈니스 로직 작성에 집중할 수 있는 환경을 갖게 되는 장점이 있다.
또한 객체 호출에 대한 제어권이 프레임워크에 있기 때문에 DI이 가능하게 된다.
Spring DI
DI(Dependency Injection)
DI란 의존성 주입을 뜻한다. 의존성 주입은 제어의 역전이 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법이다. 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라, 특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 의미한다. 자바에서는 일반적으로 인터페이스를 이용해서 의존적인 객체의 관계를 최대한 유연하게 처리할 수 있도록 하는데, 개발자는 클래스의 기능을 추상적으로 묶어둔 인터페이스를 가져다 쓰기만 하면 스프링이 자동으로 객체를 주입해주기 때문에 모듈 간의 결합도가 낮아지고 유연성이 높은 소프트웨어를 개발할 수 있게 된다.
public class Person{
@Autowired
private Calculator calculator
}
Calculator가 클래스가 아닌 인터페이스라면, 상황에 따라서 Calculator 타입의 다른 객체들을 사용할 수 있기 때문에 유연성이 높아진다.
정리
- Spring IoC(제어의 역전)는 개발자가 객체의 라이프사이클을 관리하는 것이 아닌 프레임워크(외부)가 관리하는 것으로 개발자는 비즈니스 로직 개발에만 집중할 수 있다.
- Spring DI(의존성 주입)는 제어의 역전이 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법으로 추상적으로 묶어둔 인터페이스를 가져다 쓰기만 하면 프레임워크가 자동으로 객체를 주입해주기 때문에 모듈 간의 결합도가 낮아지고 유연성이 높은 소프트웨어를 개발할 수 있다.
[Spring] Spring이란?
개발자들의 봄이 왔다! Spring이란 ? - Spring은 Java 기반의 어플리케이션 프레임워크로, Java EE의 스펙을 구현한 EJB가 복잡하고 성능이 느린것을 탈피하고자 만들어진 오픈 소스 프레임워크이다. - EJ
dev-density.tistory.com
'Spring' 카테고리의 다른 글
[Spring] Spring AOP란? (1) | 2023.10.29 |
---|---|
[Spring] @ControllerAdvice로 요청, 응답 데이터 암/복호화 리팩터링 (1) | 2023.10.23 |
[Spring] Spring이란? (1) | 2023.10.03 |