독서/스프링 입문을 위한 자바 객체지향의 원리와 이해

스프링 삼각형과 설정 정보-1

더덕2 2023. 5. 23. 16:05

스프링을 이해하는 데는 POJO(Plain Old Java Object)를 기반으로 스프링 삼각형이라는 애칭을 가진

IoC/DI, AOP, PSA라고 하는 스프링의 3대 프로그래밍 모델에 대한 이해가 필수다.

스프링 삼각형을 이해하지 않은 상태에서 스프링 프레임워크를 학습하는 것은 알파벳을 모르고

영어를 공부하는 것과 마찬가지다.

- 스프링 입문을 위한 자바 객체지향의 원리와 이해 中 -

 

01_IoC/DI (제어의 역전/의존성주입)

먼저 프로그래밍에서 의존성이란?

 

new 라고 볼 수 있다.

예) Car car = new Tire();

new를 실행하는  Car와 Tire 사이에서 Car가 Tire에 의존한다라고 단순하게 정의 할 수 있다.

 

DI는 외부에 있는 의존 대상을 주입하는 것을 말한다.

의존 대상을 구현하고 배치할 때 SOLID와 응집도는 높이고 결합도는 낮추라는 기본 원칙에 충실해야 프로젝트의 구현과 유지보수가 수월해진다.

 

스프링 없이 의존성을 주입하려면 어떻게 주입을 할 수 있을까?

1. 생성자를 통한 의존성 주입

2. 객체 속성을 통한 의존성 주입

 

그러면 스프링을 통한 의존성 주입은 어떻게 이루어질까?

스프링을 통한 의존성주입도 마찬가지로 생성자를 통한 주입과 속성을 통한 주입을 모두 지원한다.

 

그럼 어떻게 스프링프레임워크가 적용이 될까?

XML 파일을 사용하여 이루어진다.

 

매번 설정자 메서드를 통해 주입을 하는 것일까?

스프링의 속성 주입 방법 가운데 @Autowired가 있다.

@Autowired 애노테이션을 이용하면 설정자메서드(setter)를 이용하지 않고도 스프링 프레임워크가 설정 파일을 통해 설정자 메서드 대신 속성을 주입해 준다.

 

@Autowired를 사용할 때  id와 type 중 type 구현에 우선순위가 있다.

type을 찾지 못하면 id로 찾게된다.

그렇기 때문에 이 애노테이션을 사용하는 타입이 구현이 되어있으면 매칭을 하여 주입을 해준다.

 

그리고 자바 표준 어노테이션 중 @Resource로도 주입을 할 수 있다.

스프링 애노테이션과 달리 자바 어노테이션이기 때문에 type보다 id가 매칭 우선순위이다.

id로 매칭할 빈을 찾지 못한 경우 type으로 매칭한 빈을 찾게 된다.

 

둘 중 어느것을 사용하는 것이 좋냐라고 판단한다면 

@Resource라고 한다. 이유는 다른프레임워크로 만약 교체하게된다면 자바 표준 어노테이션이기 때문에 유지 보수가 

@Autowired보다 더 편하기 때문이다.

 

@Resource와 <property> 중에서는 <property>를 추천한다고 한다.

이유는 유지보수성이 더 좋기 때문인데 프로젝트 규모가 커지면 XML파일의 규모도 커지기 마련이라

XML 파일도 용도별로 분리할 수 있다고 한다.