Java EE와 Java SE 를 함께 사용해왔는데 Enterprise Edition (EE) 가 더 효율적인 spring framework 로 대체
UI - service - Dao(Data access object) - DB
* 객체 수정이 필요하다면?
1. Dao 계층에서 객체 코드 수정
2. 코드 추가후 덮어쓰기 -> service 계층에서 코드수정 필요
객체 수정이 이루어질 때 소스코드가 필요하다 -> 결합력이 높다
* 코드없이 수정할 순 없을까?
결합력이 낮은 코드를 만드는 게 목적 -> 코드가 없어도 수정 가능한 서비스 -> interface 사용
service 계층은 데이터를 직접 조작하지 않고 interface와 연결.
UI - service - Dao(interface) - Dao - DB
유지보수 측면에서 코드를 직접 수정하고 재배포하는 작업은 복잡할 뿐만 아니라 위험함.
다른 파일로 객체를 저장해 UI 계층에서 컨트롤할 수 있도록 설계.
일체형(construction injection)
조립형(setter injection) => good!!
Student student = new Student(); // 부품 ; dependency
School school = new School(); // 부품 ; dependency
school.setStudent(student); // 조립 ; injection
부품을 조립하기 위해선(DI) 주문서(명세서)가 필요함.
주문서는 XML 파일이나 annotation 으로 이루어짐.
주문서에 있는 내용대로 객체를 생성한 후 IoC 컨테이너에 저장.
Why is it called IoC?
일체형의 경우 범위가 큰 객체를 만든 후 하위계층에 인스턴스가 만들어진다.
조립형의 경우 작은 부품을 만들어 상위 계층에 조립한다.
조립형은 일체형과 부품 생성 순서가 반대라는 의미로, Inversion Of Control