멋쟁이 사자처럼 The Origin/SpringBoot

2주차 - 인터페이스, Spring IOC, DI, Spring과 SpringBoot

Wonuk 2022. 2. 8. 00:27
반응형

인터페이스

Interface를 잘 활용하면 서로 다른 구현체가

같은 목적을 위해 동작하도록 만들 수 있습니다.

사용하고자 하는 객체의 실제 자료형과 무관하게

동작하게 만들 수 있습니다.

 

Java언어는 인터페이스과 추상클래스를 잘 활용하고 있습니다.

함수의 인자와 반환 값은 interface를 활용하면 됩니다.

위 이미지의 상황에서는 List를 사용하면 됩니다.

 

InputStream의 구현체는 많지만 다 InputStream의 기능을 가지고 있습니다.

InputStream을 필요로 하는 기능에는 구분없이 사용할 수 있습니다.


Spring IOC

Inversion of Control 제어 역전

 

스프링 이전의 정통적인 개발 방식은 

정의되어있는 라이브러리의 코드를 개발자가 사용하는 방식입니다.

 

하지만 스프링이 IOC가 등장하게 되면서 제어 역전이 생기게 됩니다.

프레임워크가 자신이 해야하는 역할을 정확하게 가지고 있다면

개발자의 코드를 프레임워크가 가져다가 사용하게 됩니다.

 

스프링은 대표적으로 웹 Application에 사용되는데

통신을 통해서 요청을 받고 응답을 보내는 형태로 작동합니다.

통신을 하는 부분들은 항상 거의 동일하게 작성됩니다.

비지니스 로직을 정의를 하느냐는 매번 다르게 됩니다.

 

개발자는 요청을 받는부분은 개발을 하지않고 비지니스 로직에대한 부분만

개발하면 됩니다.

기본적으로 개발자의 코드를 프레임워크가 사용하도록 되는것입니다.


Spring IOC Container와 DI

스프링에서 IOC를 담당하는 부분을 IOC Container라고 부릅니다.

프레임워크를 기반으로 만든 Application이 작동을 할 때

IOC 컨테이너는 개발자가 작성한 코드와 설정 정보를 합쳐서

만들어져야 하는 객체들을 만들어 줍니다.

스프링 프레임워크를 잘 사용한 코드는 

자바 코드의 new 가 최소화되어 있습니다.(ArrayList 등은 제외)

생성자 주입을 통해 최소화 합니다.

즉, 개발자가 작성한 코드와 설정 정보를 합쳐서

완전한 웹 서비스를 만드는 프레임워크가 스프링 프레임워크 입니다.

 

개발자가 작성한 코드와 설정을 통해서 하나의 객체가 완성됩니다.

여기서 생성된 객체를 Spring에서 Bean 이라는 단위로 부르게됩니다.

Spring IOC 컨테이너가 관리하는 객체라고 이해하면 됩니다.

스프링 Application을 실행하게 된다면 Bean들이 IOC 컨테이너에 배치됩니다.

개발자가 비지니스 로직에 대한 코드를 작성하면서

다른 객체를 사용해야 하는 시점에

IOC 컨테이너의 Bean객체를 사용하게 됩니다.

이렇게하면 개발자가 new로 선언되어 있던 객체들을 정리한다던지

어떤 시점에 만들어진 객체를 어디에서 관리하고 있는지같은 부분들을

신경쓰지 않아도 됩니다.

이미 존재하는 Bean을 필요한 시점에 주입시켜서 사용할 수 있게

만들어주는 부분을 DI라고 합니다.

 

Spring의 IOC 컨테이너의 기능은 인터페이스를 기반으로 작동합니다.

 

Spring에서 구현을 요구하는 부분들을 interface로 정의하고

이후 사용자가 정의한 구현체 Bean을 실제 서비스에서 사용합니다.


Spring과 Spring Boot의 차이

Spring FrameWork는 기본적으로

XML의 형태로 설정을 만들었습니다.

XML을 어떤 형식으로 작성을 해야하는지 알아야하고

능숙하게 다루기 위해서는 시간이 많이 필요했기 때문에

스프링 프레임워크는 입문하기 힘들었다는 단점을 가지고 있습니다.

 

반면에 Spring Boot는 starter 패키지에 미리 정의가 되어있습니다.

starter를 넣어주기만해도 스프링 프레임워크에서 요구하는 XML파일들이

생략되어도 문제없이 저장됩니다.

Spring Boot는 XML파일을 추가할 수 있지만 JAVA파일로도 작성이 가능합니다.

 

War와 Jar

 

 

 

반응형