만약 Repository1 생성자 변경이 일어나면 모든 Controller와 모든 Service의 코드 변경이 필요
강한결합을 해결하기 위해서 각 객체애대한 객체 생성은 딱 1번만 하고, 생성된 객체를 모든 곳에서 재사용 하면 된다.
위의 구조를 다음과같이 변경해준다면 Repostiory1이 변경이되어도 아무도 코드를 변경할 필요가 없어진다.
Service1생성자가 변경되어도 모든 Ctonroller를 변경할 필요가 없어진다.
DI (의존성 주입)의 이해
"제어의 역전 (IoC: Inversion of Control)"
프로그램의 제어 흐름이 뒤바뀜
일반적: 사용자가 자신이 필요한 객체를 생성해서 사용
IoC (제어의 역전)
용도에 맞게 필요한 객체를 그냥 가져다 사용
"DI (Dependency Injection)" 혹은 한국말로 "의존성 주입"이라고 부릅니다.
사용할 객체가 어떻게 만들어졌는지는 알 필요 없음
음식을 자를 때 필요한 가위는? → 부엌가위 (생성되어 있는 객체 kitchenScissors)
무늬를 내며 자를 때 필요한 가위는? → 핑킹가위 (생성되어 있는 객체 pinkingShears)
정원의 나무를 다듬을 때 필요한 가위는? → 전지가위 (생성되어 있는 객체 pruningShears)실생활 예제) 가위의 용도별 사용
스프링 IOC 컨테이너 사용하기
앞에서 DI 를 사용했을 때의 장점을 살펴 보았다.
그런데 DI 를 사용하기 위해서는 객체 생성이 우선 되어야 했다.
과연 어디서 객체 생성을 해야 할까?
바로 스프링 프레임워크가 필요한 객체를 생성하여 관리하는 역할을 대신해 준다.
빈 (Bean): 스프링이 관리하는 객체
스프링 IoC 컨테이너: 빈을 모아둔 통
18. 스프링 프레임워크 재이해
스프링 프레임워크란?
The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.
Enterprise applications 개발 편의성 제공
Enterprise applications? 기업용 애플리케이션??
고객 대상 웹 서비스 ex) 구글, 네이버, 쿠팡 등
스프링은 결국 기업용 애플리케이션의 요구사항 해결에 초점을 맞춘 프레임워크
기업용 애플리케이션 특성
신뢰성이 중요 (ex. 병원에서 수술 시 환자 기록이 바뀐다면?)
서버의 안정성 유지 중요 (ex. 복권 실시간 추첨에 서버 다운 된다면? )
데이터 관리가 중요
막대한 양의 데이터 관리 필요
여러 사용자가 동시 접속 시 데이터 일관성
→ 대부분 DB (데이터베이스) 사용
스프링의 핵심 요소는?
A key element of Spring is infrastructural support at the application level: Spring focuses on the "plumbing" of enterprise applications so thatteams can focus on application-level business logic, without unnecessary ties to specific deployment environments.