스프링 프레임워크(Spring Framework)란 무엇인가?
1. IOC (Inversion Of Control)
Framework code invokes application code during an operation and ask for application specific information instead of application calling the Framework code directly, hence control is inverted. An example of IOC is Template pattern via sub-classing. Spring IOC provides annotations based IOC as well.
Inversion of Control is a principle in software engineering by which the control of objects or portions of a program is transferred to a container or framework. It's most often used in the context of object-oriented programming.
IoC는 소프트웨어 엔지니어링의 한가지 원리입니다. 프로그램의 객체의 제어가 컨테이너 혹은 프레임워크로 이전되는 것을 말합니다. 프레임워크 코드들은 작업 시 어플리케이션 코드들을 호출합니다. 즉, 어플리케이션이 프레임워크를 직접적으로 호출하는 작업 대신 프레임워크가 어플리케이션의 특정 정보에 대해 요청합니다, 따라서 제어가 역전됩니다. IOC의 예시는 sub-classing을 통한 Telmplate pattern입니다. Spring IOC는 또한 annotation을 제공하여 편리성을 높입니다.
- decoupling the execution of a task from its implementation
- making it easier to switch between different implementations
- greater modularity of a program
- greater ease in testing a program by isolating a component or mocking its dependencies and allowing components to communicate through contracts
장점은 다음과 갑습니다.
1. 구현으로부터 실행하는데 까지 느슨한 결합을 만듭니다.
2. 다른 구현체 사이에서 전환하는 것이 쉬워집니다.
3. 프로그램의 모둘화가 잘됩니다.
4. component를 고립시키거나 의존성을 가상으로 만드는 등 프로그램 테스트가 쉬워집니다. 또한 접촉을 통한 components들이 소통하도록 하는 것이 쉽습니다.
2. DI (Dependency Injection)
Instance of objects are injected into a target Object's field (where field should be ideally of an interface type) via Constructors/Setters instead of target Object creating the instances themselves. Hence, this approach enabled application objects being POJO which can be used in different environment and with different implementations.
Dependency injection is a pattern through which to implement IoC, where the control being inverted is the setting of object's dependencies.
The act of connecting objects with other objects, or “injecting” objects into other objects, is done by an assembler rather than by the objects themselves.
객체의 인스턴스들은 해당 객체의 필드(field)에 주입이 됩니다. (필드가 인터페이스 형태로 정의 되어 있는 것이 전제입니다.) 인스턴스들은 그들 스스로 객체를 생성해야 하는 방법 대신에 Constructors/Setters/Fields 등을 통해 주입됩니다. DI 덕분에 어플리케이션은 객체들이 POJO가 되도록 합니다. POJO들은 다른 환경에서 사용가능하며 또한 다른 형태로 구현될 수 있습니다.
DI는 IoC를 구현하는 패턴 중 한가지 입니다. 역전된 제어는 객체의 의존성 설정입니다. ( 즉, 객체의 의존성은 제어가 역전되어 있다는 뜻입니다. ) 객체를 다른 객체와 연결하거나, 주입하는 것은 객체 그들 자신에 의해서 이루어지지 않고 조립해주는 하나의 대상에 의해서 진행됩니다.
객체를 주입하는 방벙은 총 3가지가 있습니다.
//constructor
class A{
private B b;
@Autowired
public A(B b){
b = new B();
}
}
//field
class A{
@Autowired
private B b;
...
}
//setter
class A{
private B b;
@Autowired
public void setB(B b){
this.b = b;
}
}
3. AOP ( Aspect-Oriented Programming)
This allows separation of cross-cutting concerns by adding behaviors (aspects) to the application code instead of application involving into those concerns itself. This enables application to be modular instead of mixing different concerns to a single place. The examples are Transaction management, logging etc.
AOP는 어플리케이션이 스스로 반복적인 코드들을 담는 것 대신에 동시에 같은 장소에서 발생하는 동작들을 따로 분리하도록 합니다. 따라서 한 장소에 여러가지 코드를 섞어 두는 것 대신에 모듈화를 시킬 수 있습니다. Transaction 관리나, logging 등이 예시입니다.
4. JAVA EE를 대체하는 경량화된 컨셉
Spring is lightweight solution for building enterprise application using POJO. It can be used in servlet container (e.g. Tomcat server) and doesn't require an Application server.
스프링은 POJO를 사용한 enterprise 어플리케이션을 만들기 위한 경량화된 솔루셔닙니다. Tomcat server와 같이 servlet container에서 사용될 수 있으며 Application server를 요청하지 않습니다.
*Bean이란 무엇인가?
A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. These beans are created with the configuration metadata that you supply to the container, for example, in the form of XML definitions.
bean은 초기화되어있는, 조립되어 있는 객체입니다. 한편으로 Spring IoC Container에 의해 관리됩니다. 이러한 Bbean들은 사용자가 지원하는 Container에서 metada 설정을 통해 만들어 질 수 있으며 예를 들어 XML 설정이 가능합니다.
'Spring' 카테고리의 다른 글
네이버 지역검색 API를 활용한 맛집 List 제작 - (2) (0) | 2021.08.22 |
---|---|
네이버 지역검색 API를 활용한 맛집 List 제작 - (1) (0) | 2021.08.22 |
Swagger (0) | 2021.08.21 |
@Valid를 위한 Blank, Empty, Null 차이 (0) | 2021.05.13 |
순수 java 코드를 이용한 Spring-MVC 등록 과정 (2) | 2020.11.05 |