본문 바로가기

프레임워크/Spring

[프레임워크] <Spring>〈Maven〉기초

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);
  }
}

프레임워크

장점

구현이 빨라진다.

구조를 몰라도 쓸 수 있기 때문에 개발자의 역량이 상향 평준화된다.

구조의 일관성이 유지되기 싶다.

유지보수가 용이하다.


결합도를 낮추기 위한 다양한 노력

◎ 인터페이스 활용한다.

   ⇨ 객체가 변경되어도 메서드를 추가 변경하지 않아도 된다.

◎ 팩토리 패턴을 활용한다.

  ⇨ 객체명을 요청하면 해당 객체를 제공하는 것이다.