Today I Learned_220425
Spring Framework
IntelliJ
command + option + M : 함수 추출
패키지에서 오른쪽 클릭 -> diagram : 객체들간의 관계를 볼 수있다.
사슬 모양 클릭하면 dependency도 볼 수 있음
IoC(Inversion of Control)
제어의 역전
기존 프로그램 : 클라이언트 구현 객체/프로그래머가 스스로 필요한 서버 구현 객체를 생성-연결-실행함
제어의 역전 : 프로그램의 제어 흐픔을 직접 제어하는 것이 아니라 외부에서 관리하는 것
내가 호출하는 것이 아니라 프레임워크가 호출한다(제어권이 뒤바뀐다)
IoC는 스프링에만 국한된 것이 아니라, 제어권이 역전된 것을 총칭한다(예시 : JUnit도 실행 연결은 JUnit이 담당함)
프레임워크 vs 라이브러리
프레임워크 : 코드를 제어하고 대신 실행
라이브러리 : 코드가 직접 제어의 흐름을 담당
Dependency Injection(의존관계 주입)
프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안 된다 -> 의존성 주입은 이 원칙을 따르는 방법이다.
의존관계는 정적인 클래스 의존 관계와 동적인 의존 관계를 분리해서 생각해야 한다.
- 정적인 클래스 의존 관계 : 애플리케이션을 실행하지 않아도 분석이 가능한 클래스 의존 관계
- 동적인 인스턴스 의존 관계 : 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
의존관계 주입 : 애플리케이션 런타임에 외부에서 클라이언트와 서버간의 의존관계를 설정하는 것
의존관계 주입을 사용하면…
- 클라이언트 코드(애플리케이션 코드)를 변경하지 않고 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
- 정적인 클래스 의존관계를 변경하지 않고, 동적인 객체 인스턴스 의존관계를 쉽게 변경 가능하다.
DI(IoC) 컨테이너
객체를 생성하고 관리하면서 의존관계를 연결해 주는 것.
IoC/DI를 해 주는 컨테이너
스프링 뿐만 아니라 여러 오픈소스 DI 컨테이너들이 존재
요새는 IoC 컨테이너보다 DI 컨테이너라는 용어를 더 많이 사용함