느슨한 결합
1. Service : 사용자의 요구에 맞는 서비스를 담당
2. DAO : 데이터 소스에 접근하는 방법 및 구현 기술을 숨기고 Java코드를 이용하여 데이터를 제공 받을 수 있게 해주는 Data Access Object
Service를 변경하기 위해 DAO를 변경하는 경우
1. 코드 수정
2. 코드 덮어쓰기
-> 수동으로 Service코드를 수정하지 않고 변경된 사항을 적용하려면 자동으로 객체를 변경할 수 있도록 처리해야한다. 이때 인터페이스에서는 파일을 읽어와서 자바의 코드를 수정하지 않고 객체의 참조를 변경할 수 있게 한다.
-> 원래 강하게 결합된 두 클래스가 외부 파일을 통해 수정할 수 있는 상태로 바뀐것을 느슨한 결합 이라고 한다.
스프링의 최대 기능
> 객체를 생성해주고 객체들을 조립해준다.
1. DI(Dependency Injection)
(1) DI가 중요한이유
부품 쉽게 갈아끼려고 한다고 생각하면 편하다.
B b = new B();
A a = new A();
a.setB(b);
더 쉽게
(1) Setter Injection
처음 사용했던 Setter 가 대표적 예시
-> 조립형 컴퓨터
(2) Construction Injection
-> 완성형 컴퓨터 (스프링을 사용하는 가장 큰 이유)
2. IoC Controller
컴퓨터 주문서 -> XML파일/Annotaion
Container -> 객체를 담는 공간
(1) 일체형 결합
-> 큰 부품을 만듬 -> 작은 부품들
(2) 조립형 결합 ( IoC Container )
-> 작은 부품을 결합 -> 큰부품 -> 더 큰 부품으로 결합 ( 이게 제어의 역전 / Inversion of Control )
3. Annotation 사용 이유
(1) 과거 xml을 통해 개발했지만 좀 더 편하게 bean의 의존성 주입을 하기 위해서
xml -> java ( @Autowired 로 대체 )
<property name="exam" ref="exam" />
@Autowired
private Exam exam;