spring framework의 특징
1. 경량컨테이너
- 자바 객체의 생성, 소멸 등 라이프사이클을 관리한다.
2. DI(Dependency Injection)를 지원
- 설정파일이나 어노테이션을 통해 객체 간의 의존관계를 설정하도록 한다.
3. AOP(Aspect Oriented Programming)를 지원
- 트랜잭션, 로깅, 보안과 같은 모듈들을 분리해서 관리하고 각 모듈에 적용가능하다.
4. POJO(Plain Old Java Object)를 지원
- 특정한 인터페이스를 구현하거나 클래스를 상속받지 않아도 된다.
IoC란?
Inversion of Control 의 약자로 역제어의 뜻을 가지고 있다.
개발자는 객체를 생성할 때 new를 통해 객체를 생성하고 객체 간의 의존관계 연결 등에 대한 제어권을 개발자가 가지고 있던 반면,
스프링 프레임워크에서는 객체 생성에서부터 라이프사이클 관리까지 모든 객체에 대한 제어권을
스프링 컨테이너가 제공하고 있으며, 이를 역제어 (IoC)라고 한다.
1. DL (Dependency Lookup)
컨테이너 저장소에서 관리되고 있는 빈을 API를 이용하여 개발자들이 직접 LookUp을 하여 사용하는 것을 말한다.
DL을 사용할 경우 컨테이너와의 의존관계가 발생하며 종속성 문제가 발생한다. 이를 줄이는 방법으로 DI를 사용
1. DI (Dependency Injection)
각 클래스 사이의 의존관계를 빈 설정-xml파일 정보를 바탕으로 컨테이너가 자동으로 연결해준다.
컨텡너가 의존관계를 자동으로 연결해주기 때문에 개발자들이 컨테이너 API에 종속될 필요가 없다.
- 스프링의 결합도
결합도가 높은 코드의 경우, 애플리케이션이 복잡해지는 단점이 나타난다. 계층 사이에 결합이 강하기 때문에 한 쪽을 수정하면 연관된 코드도 다 함께 수정해야 한다.
public class MessageBean {
public void sayHello(String name) {
System.out.println("안녕하세요.? "+name+"님~~");
}
}
public class MessageBeanEn {
public void sayHello(String name) {
System.out.println("Hello~~ "+name+"!!");
}
}
public class HelloApp {
public static void main(String[] args){
MessageBean mb = new MessageBean();
mb.sayHello("홍길동");
}
}
MessageBeanEn을 사용하려면 객체를 또다시 만들고 수정해야한다. 이러한 로직이 1억개 있다고 하면 하나하나 수정하기란 쉬운일이 아니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="mb1" class="ex03.MessageBeanKo" />
<!--
MessageBean mb1 = new MessageBeanKo() 와 동일
-->
<!-- mb2로 MessageBeanEn빈 생성하기 -->
<bean id="mb2" class="ex03.MessageBeanEn"/>
</beans>
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class HelloAppSpring {
public static void main(String[] args) {
// HelloApp과 interface 사이에 spring이 끼어든다.
// spring bean configuraion file.xml 파일을 만든다.
// DL (Dependency Lookup) 이름으로 객체를 찾아서(lookUp) 사용
// 우리가 객체 생성해서 사용하는거 아님
String config = "classpath:ex03/applicationContext.xml"; // class파일이 있는 곳
ApplicationContext ctx = new GenericXmlApplicationContext(config);
MessageBean mb = (MessageBean)ctx.getBean("mb2"); // 지정했던 id를 넣어줌 (얘만 바꿔주면 됨)
// 결합력을 느슨하게 해주면 교체하기가 쉬워진다.
mb.sayHello("susan");
}
}
1) spring bean configuraion file.xml 파일을 만들고
2) <bean>태그를 통해 id를 지정해준다.
3) DL 이름으로 객체를 찾아서 사용한다.
객체를 만들어서 사용하는 것이 아니라 객체를 xml파일(컨테이너 저장소)에 넣어서 컨테이너 저장소에서 객체를 꺼내서 사용한다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] Maven에 대해 알아보자 (0) | 2020.09.02 |
---|---|
[Spring] DB연결, Controller에 대해 알아보자 (0) | 2020.08.20 |
[Spring] 프로젝트 생성 방법에 대해 알아보자 (0) | 2020.08.18 |
[Spring] Constructor Injection에 대해 알아보자 (0) | 2020.08.13 |
[Spring] DI (Dependency Injection)에 대해 알아보자 (0) | 2020.08.13 |