336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Spring
- Spring에선 Interface를 사용하게 끔 만들어져 있다
- Spring은 new (객체화 시키는 키워드)를 사용하지 않으려는 목적이 있다
- 의존 관계에 있는 Class 선언 시
- 의존 관계(캡슐화) 어떠한 Class가 다른 Class를 필요로 할 때
- ex) BIZ Class는 DAO Class가 필요하다
# Spring 개념
- EJB를 주 프레임워크로 사용할 때 불편했던 점들을 해소
- 로드 존슨이 출판한 도서 Expert One-on-One J2EE Design and Development에 선보인 코드가 Sping 근간
- Java를 사용함에 있어 표준처럼 사용됨
# Spring 특징
- Java의 객체를 스프링이 직접 관리
- 객체의 라이프사이클을 스프링이 직접 관리하며 필요한 객체를 얻어옴
- POJO (Plain Old Java Object) 기반의 프레임워크
- 순수하게 자바만 쓰인 코드
- IoC (Inversion Of Control) 지원
- 소스코드가 스프링을 호출하는 것이 아니라 스프링이 코드를 호출
- DI (Dependency Injection)을 지원
- 각 계층이나 서비스간 객체간의 의존성이 존재할 경우 스프링이 직접 서로 연결
- 약한 결합을 가능케 함
- AOP (Aspect Oriented Programming)을 지원한다
- 트랜잭션, 로깅, 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용
- 스프링은 확장성이 높다
- 스프링의 소스는 모두 라이브러리로 분리 시켜 놓음으로써 필요한 라이브러리만 가져다 쓸 수 있다
- 많은 외부 라이브러리들도 이미 스프링과 연동
- Model2 방식의 MVC Framework 지원
- Model2 : Servlet과 JSP를 구분
- MVC Framework을 배우기 위해서 스프링을 배운다
- EJB, Struts 등을 제치고 업계 표준으로 자리 잡음
- 일반 사용자를 위한 웹 기반 어플리케이션 부터 기업환경의 어플리케이션까지 스프링이 활용됨
# Spring의 의존 관계
- 각각의 모듈이 의존 관계가 있어서
- 하나의 라이브러리를 사용하기 위해서 다양한 라이브러리가 필요하다
- 이러한 불편한 점을 해소하기 위해 Maven을 만들었다
- Maven
- Spring의 의존 라이브러리를 간편하게 추가할 수 있도록 의존성 주입을 제공
- 자동으로 의존 라이브러리를 추가해줌으로써 개발자는 단순히 개발만 하면 된다
# Spring DI/IoC (Tips)
- Java의 Class 상속 / Interface를 이용한 추상화를 기반으로 하는 개발 방법
- Spring은 DI/IoC를 강력하게 지원하는 프레임워크
- DI : Dependency Injection
- 프로그램에 필요한 각종 클래스들을 Bean Container에 두고 필요할 때 마다 불러와서 사용
- 서블릿에 필요한 Biz가 있다면 Spring이 서블릿에게 Biz를 주는 것이다
- 기존 방식의 Biz에서 DAO를 연결하는 방식은 결합
- 내가 필요한 객체를 받아오는 것이 DI (의존성 주입)
- IoC : Inversion of Control
- 프로그램을 제어하는 패턴 중 하나
- DI는 IoC패턴의 구현체 중 하나
- DI에 따라 프로그램의 흐름이 완전히 변경
- DI 같은 것들의 개념 제어를 역전 시킨다
- 기존의 개념
- 서블릿이 Biz가 필요하다면 new로 Biz를 알고 생성할 수 있어야 한다
- Biz에 대한 제어는 서블릿이 한다
- 이 개념의 역전 (만드는 주체를 역전)
- IoC 개념
- Spring이 서블릿에 필요한 Biz를 생성해주고 소멸시킨다
- 스프링은 DI를 기준으로 많은 프레임워크 모듈들이 만들어짐
- Spring은 DI Framework 혹은 IoC Framework라고 부름
# 의존성
- 의존도가 높은 경우 (강한 결합)
- 어떤 Class가 다른 Class를 사용해야 하는지 알고 있는 것
- new 키워드를 사용한 것
- 의존도가 낮은 경우 (약한 결합, 느슨한 결합)
- 어떤 Class가 다른 Class를 사용해야 하는지 모르는 것
- 의존도를 가르는 것은 Interface
- new Interface를 사용해야 의존도가 낮다라고 생각한다
# DI의 실세계 예시
- 핸드폰을 빌리는 경우 누구에게 빌리느냐에 따라서 핸드폰의 기종이 다를 수 있다
- 어떤 Class가 오던간에 정상적으로 동작이 가능하게 하기 위해서 사용
# 전통적인 POJO 방식
- DAO를 정의하고 Biz에서 DAO를 생성하여 Biz에서는 DAO Class 내용을 모두 알 고 있다
- 서블릿에서도 Biz를 생성해서 Biz 메소드를 사용한다
- 이때 Biz는 인터페이스가 아니라 클래스이다 즉 다형성을 포기한 형태
- 이러한 방식은 수정 및 확장에 불리한 구조
- 안좋은 구조의 코드
# Interface를 활용한 POJO 방식
- Interface로 DAO와 Biz애서 메소드를 정의해준다
- DAOImpl 이라는 클래스에서 dao를 implements 한 후 Override를 시켜준다
- Main에서도 new를 이용해서 인터페이스를 선언한다
- 하지만 new를 사용해서 BizImpl와 강한 결합이기 때문에 좋은 코드는 아니다
# Interface와 Factory를 활용한 POJO 방식
- 사용하는 곳에서는 new를 사용하지 않기 위한 개념
- Factory는 public static으로 Biz를 받아 BizImpl로 리턴해주는 방식을 사용한다
- 그리고 Main에서 Factory의 메소드를 사용함으로써 new를 사용하지 않는다
- Factory (완성된 객체를 만드는 공간)
- 엔진을 만드는 공장에서 만들어진 엔진은 엔진을 만드는 곳에서만 알 수 있다
- 다음 부분을 연결시키는 공장에서는 완성된 엔진을 이용하지만 어떠한 모양인지 알 수 없다
- Main과 BizImpl간의 관계는 끊어졌지만 Biz와 DAO의 관계는 강한 결합이 유지된다
# Interface와 Factory를 활용한 POJO 방식 2
- get과 set을 이용한다
- Factory에서 할일이 많아진다
- Setter에서 필요한 DAO를 만들어서 보내준다
# Spring DI의 원리
- Main
- Biz가 어떠한 내용인지 모른다
- BizImpl
- DAO가 어떠한 내용인지 모른다
- DAOImpl
- Factory
- Factory가 모두 생성해서 보내기 때문에 서로는 모르지만 Factory는 알 고 있다
- Main이 생성할 권리는 Factory가 가져와서 생성을 한다
- Spring은 결론적으로 Factory에서도 new 키워드를 지우고자 한다
# Spring DI를 활용한 의존성 주입 - Setter를 이용한 DI
- xml을 이용해서 객체를 생성한다
- 객체를 Interface 모양으로 선언이 가능하고 요소들도 정의할 수 있다
'[ Developer ] > Spring Framework' 카테고리의 다른 글
[Spring] 스프링 로그남기기 Logback SLF4J 이용 (0) | 2016.06.10 |
---|---|
[Spring] 스프링 인터셉터 Interceptor (0) | 2016.06.10 |
[Spring] 스프링 컨트롤러 Controller (0) | 2016.06.08 |
[Spring] 스프링 MVC 기본 및 응용 실습 Model View Controller (0) | 2016.06.08 |
[Spring] 스프링 의존성 주입 실습 DI 실습 (0) | 2016.06.08 |