의존 관계
: 둘 이상의 객체가 서로 협력하는 관계
- 예시
A객체는 B객체에 의존한다 =
A는 B를 사용한다
즉, 기술적인 관점에서 B의 변화는 A에게 영향을 준다- 적용
restaurants Controller는 restaurants Repository를 사용한다 =
Controller는 Repository에 의존한다
restaurants Controller에서 Repository를 직접 생성(객체 생성의 책임 = controller)
이후 직접 멤버 변수에 할당(=Controller에 Repository 연결)
객체 생성과 연결을 컨트롤러가 아닌 별도로 담당할 수 있는데 이것을 spring ioc container를 통해 가능하다.
객체간의 의존성을 낮추는 의존성 제어를 위해 Spring IoC 컨테이터가 사용된다.
'의존성 주입'이란 객체의 생성과 연결을 Spring에서 직접 처리 하는 것이며 사용할 객체를 다양하게 변경 가능한 장점이 있다.
이를 위해, Spring에서는 @Component와 @Autowired 을 지원한다.
의존성 주입(DI) 개념 참고
컨테이너
: 작성한 코드를 spring에서 위임받아 독립적으로 처리하는 것
@Component
: 컨테이너 안에 하나의 bean으로 등록시키기 위해 사용하는 annotation이며
@Component는 개발자가 직접 컨트롤할 수 있는 클래스(직접 만든)를 Bean으로 등록하고 싶은 경우 (선언된 Class를 Bean으로 등록) 에 사용한다.
bean
: 자주 사용하는 객체를 Singleton 객체로 생성해놓고 어디서든 불러서 쓸 수 있는 것을
Spring 에서 Bean 이라는 이름을 붙인 것.
클래스를 한번 만들어놓고 재사용하기 편하게 하기 위함.
@Autowired
: Container에 있는 Spring Bean을 찾아 주입시켜주는 Annotation이며 IoC 컨테이너에 있는 Spring bean을 찾아 주입한다.
의존성 주입을 사용하는 이유
1. 재사용성을 높여준다.
2. 테스트에 용이하다.
3. 코드를 단순화 시켜준다.
4. 사용하는 이유를 파악하기 수월하고 코드가 읽기 쉬워지는 점이 있다.
5. 종속성이 감소하기 때문에 변경에 민감하지 않다.
6. 결합도(coupling)는 낮추면서 유연성과 확장성은 향상 시킬 수 있다.
7. 객체간의 의존관계를 설정할 수 있다.
열심히시네요 화이팅입니다 ^_^