Spring 공부

세모네모동굴배이·2021년 5월 17일
0
post-custom-banner
  1. 스프링 주요 기능
    Dependency Injection
    스프링 프레임워크의 핵심 기능

Transaction management
트랜잭션을 관리해주는 것

  1. 기업형 응용 프로그램을 보조하기 위한 쉬운 프레임워크
    Java EE
    분산형, 기업형 응용 프로그램 개발을 위한 API
    결합력을 낮추는 DI, DB Transaction처리, 로그 처리....
    Java SE
    일반적인 로컬 응용 프로그램 개발을 위한 API
    파일 I/O, 콘솔 I/O, 윈도우 I/O, 네트워크 I/O, Thread, ....
    Java EE를 대신해서 Spring이 사용된다고 생각하면 됨.

Java SE + Spring 을 사용하여 웹개발

Java EE와 함께 사용하는 경우도 있음.

Java EE의 대부분의 기능을 Spring으로 사용가능.

  1. 웹을 위한 스프링 프레임워크 모듈
    MVC ← DI를 활용
    느슨한 결합력과 인터페이스

트랜잭션 ← AOP을 활용
인증과 권한 ← Servlet Filter를 활용

이러한 상황을 구성한다.

기존 B1을 사용하고 있는 코드이다.

// 서비스내 코드
private B1 b = new B1();
b.getData();
그런데, B2로 변경해서 사용해야 한다

그렇다면, 서비스내 코드도 아래와 같이 변경해야 한다.

// 서비스내 코드 변경
private B2 b = new B2();
b.getData();
이것은 강한 결합 이라고 본다!

<< 강한 결합 >> 은

변화가 일어 났을때 함께 변화해야 하기에

우리는 <<느슨한 결합>>을 통해

잦은 수정을 막고 오류도 줄여야 한다.

그래서!! --->> 인터페이스 코드를 둔다.

그렇다면, 서비스내 코드는

private B b = new B2();
b.getData()
이렇게 변화할 것이다.

왼쪽을 느슨한 결합으로 해결하였다면!

이번에는 오른쪽! 객체 생성을 느슨하게 해보자

객체 생성 코드를 작성하지 않기 위해 우리가 해야 할일은

객체의 생성과 조립을 위한 외부 설정 파일을 만드는 것이다

이것은 --->> XML, Annotation 을 활용하게 될 것이다.

Dependency 개념

일체형
Composition has a

class A
{
private B b; // B는 A의 종속되어 있다. B는 A의 부품이다.

public A(){
  b = new B();   // 직접 만들어 끼우는 일체형 부품
}

}
사용자 입장에서의 사용

A a = new A();
이렇게 사용 가능
일체형이기 때문에 A만 만들면 B는 자동으로 생성되고 사용자 입장에서는 부품이 어떤게 들어있는지 알 수 없음.

조립형
Association has a

일체형에 비해 느슨한 결합
class A
{
private B b; // B는 A의 종속되어 있다. B는 A의 부품이다.

public A(B b){
  this.b = b;
}

public void setB(B b){    // 세팅해서 조립하여 사용하는 부품
  this.b = b;
}

}
사용자 입장에서의 사용

B b = new B(); // Dependency - 부품
A a = new A();

a.setB(b); // Injection - 부품을 주입하는 것
장점 : 부품을 쉽게 바꿀 수 있다
단점 : 부품을 생성해서 조립해야 하는 번거로움
Injection 개념
Setter Injection
세터를 이용한 부품 주입

B b = new B(); // Dependency - 부품
A a = new A();

a.setB(b); // Injection - 부품을 주입하는 것
Construction Injection
생성자를 이용한 부품 주입

B b = new B(); // Dependency - 부품
A a = new A(b); // Injection - 부품을 주입하는 것
▶ 스프링이 이러한 부품을 조립해 주는 역할을 해준다
▶ 스프링이 DI의 역할을 해준다

post-custom-banner

0개의 댓글