Transaction management
트랜잭션을 관리해주는 것
Java SE + Spring 을 사용하여 웹개발
Java EE와 함께 사용하는 경우도 있음.
Java EE의 대부분의 기능을 Spring으로 사용가능.
트랜잭션 ← 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의 역할을 해준다