참고:
DI(Dependency Injection)은 의존성 주입이라 하는데, 스프링의 IoC(Inversion Of Control) 컨테이너를 구현한 디자인 패턴이라고 보면 된다.
AOP(Aspect Oriented Programming)은 관점 지향 프로그래밍으로써,
간단하게 말하자면 핵심 비지니스 로직과 부가 로직을 분리하여 그 기준으로 각각 모듈화하는 프로그래밍 기법이다.
참고: 스프링 부트가 있기 전에는, War 파일로 빌드하여 보통은 오픈소스 중 Apache foundation의 Tomcat이라는 WAS(Web Application Server)를 사용하여 직접 War를 포함하여 서버를 실행했어야 했다.
유연하고 변경이 용이??
⇒ 자동차의 역할에 따라서 (인터페이스) 구현을 분리한 것이다.
다형성의 실세계 비유
역할과 구현을 분리
정리
MemberService
클라이언트가 구현 클래스를 직접 선택
MemberService
는 보통Repository
를 사용하는 클라이언트이다.
MemberRepository m = new MemoryMemberRepository();
MemberRepository m = new JdbcMemberRepository();
MemberService
는 인터페이스에 의존하지만, 구현 클래스도 동시에 의존한다.MemberService
클라이언트가 구현 클래스를 직접 선택MemberRepository m = new MemoryMemberRepository();
MemberService
를 인스턴스화하며 그 때 의존할 인스턴스를 선택하는 (ex) MemoryMemberRepository
) 별도의 기획자가 필요한 것이다.실무 고민
SRP 단일 책임 원칙
DIP 의존관계 역전 원칙
OCP