Spring 프레임워크
◎ IoC와 AOP를 지원하는 경량의 프레임워크이다.
◎ 낮은 결합도와 높은 응집도를 가지는 코드를 작성하기 쉽다.
◎ 공통로직을 별도의 클래스로 모듈화하여 올바른 시기에 호출하는 기능을 수행한다.
◎ POJO를 다루는 컨테이너를 제공한다.
IoC(Inversion of Control)
제어의 역행
◎ Spring에서는 제어를 프레임워크에 맡긴다.
◎ 컨테이너를 통해 수행한다.
컨테이너
◎ 객체를 생성하거나 관리해줄 수 있는 주체이다,
◎ 관리는 호출 시점을 정하는 것 혹은 소멸시점을 정하는 것이다.
◎ Spring 에서 사용하는 컨테이너는 Spring 컨테이너이다.
⇨ 일반 자바객체(POJO) 생성 가능하다.
⇨ POJO[ DTO, DAO, Action ]
제어
◎ 객체를 생성 및 관리한다.
⇨ new
◎ 코드에 new가 없는 것이 좋다.
⇨ 개발자가 new를 하지 않는다.
⇨ 컨테이너가 new를 하기에 C파트는 new라는 연사자를 사용 안한다.
⇨ 핸들러매퍼의 new 코드들이 삭제되고 그 역할을 스프링 컨테이너가 대신한다.
목표
◎ 코드에서 new를 제거 하는 것이다.
AOP(Aspect Oriented Programming)
◎ AOP(관점 지향 프로그래밍) ↔ OOP(객체 지향 프로그래밍)
XX지향 프로그래밍
◎ 절차
⇨ 순서대로 진행하는 방식
⇨ 일의 처리순서가 가장 중요
⇨ 알고리즘에 적합
⇨ 성능과 속도가 중점
◎ 객체
⇨ 모듈(클래스) 단위로 코드를 구성하는 방식
⇨ 객체가 중요 == 설계가 중요
⇨ 성능 - 메모리(Heap) : 싱글톤, 팩토리
◎ 관점
⇨ 기존의 기능개발은 "핵심 로직"을 중심으로 개발되었다.
➔ 비즈니스메서드, CRUD, 핵심관심
⇨ 다양한 CRUD에 공통적으로 적용되는 로직을 따로 모듈화해서 저장, 호출이 가능해진다.
➔ Spring 컨테이너가 AOP를 지원해주기 때문이다.
⇨ 공통로직(횡단관심)을 별도의 클래스 메서드로 작성하게 됩니다.
➔ 예) JDBCUtil
경량
◎ POJO 기반 구성이기 때문에 다루는 객체가 가볍다.
◎ 싱글톤 패턴을 활용하면 사용 메모리가 적다.
POJO 개념을 사용하지 않은 코드
public class ExampleListener implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}
catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}
POJO를 활용한 코드
@Component
public class ExampleListener {
@JmsListener(destination = "myDestination")
public void processOrder(String message) {
System.out.println(message);
}
}
프레임워크
장점
◎ 구현이 빨라진다.
◎ 구조를 몰라도 쓸 수 있기 때문에 개발자의 역량이 상향 평준화된다.
◎ 구조의 일관성이 유지되기 싶다.
◎ 유지보수가 용이하다.
결합도를 낮추기 위한 다양한 노력
◎ 인터페이스 활용한다.
⇨ 객체가 변경되어도 메서드를 추가 변경하지 않아도 된다.
◎ 팩토리 패턴을 활용한다.
⇨ 객체명을 요청하면 해당 객체를 제공하는 것이다.
'프레임워크 > Spring' 카테고리의 다른 글
[프레임 워크] <Spring>〈Maven〉application.xml 생성 (0) | 2024.02.28 |
---|---|
[프레임워크] <Spring>〈Maven〉스프링 프로젝트 생성 (0) | 2024.02.28 |
[프레임워크] <Spring>〈Maven〉DI (0) | 2024.02.27 |
[프레임워크] <Spring>〈Maven〉xml (0) | 2024.02.26 |
[프레임워크] <Spring>〈Maven〉BeanFactory (0) | 2024.02.26 |