관심사의 분리
리팩토링
메소드 추출 - 공통적으로 사용하는 코드 추출화하여 메소드화
DB 커넥션 만들기의 독립
상속을 통한 확장
디자인 패턴
추상 메소드 팩토리 패턴 - 템플릿 메소드 패턴 ( 훅 메소드, 추상 메소드 )
전략 패턴 - IOC, DI와 연관
객체 지향 원칙
Solid원칙 -> DIP(Dependency Inversion Principle) - 의존 역전 원칙
IOC의 활용 -> 생성자를 통해 생성시 구현클래스에 의존하게 되므로 확장성에 무리가 발생한다.
따라서 내부코드에서는 인터페이스에 의지하고 외부에서 그 인터페이스를 상속하는 객체를 주입함으로써 의존성을 탈피하고 확장성을 증진시킨다.
Solid원칙 -> OCP ( Open-Closed Principal )
높은 응집도, 낮은 결합도
Framework
IOC -> Application Context - Bean Factory ( @Bean )
보통 Spring Framework run시에는 방식에 따라, WebFlux, MVC에 따라, Applicaton Context 객체 생성 ->
Application Context는 Interface이고 상속하는 것중 AbstractApplication Context존재. ->
그리고 ApplicationContext는 BeanFactory를 상속하기에 getBean() Method 호출 ->
getBean() 호출시 내부에 @Configuration @Bean annoation목록을 미리 설정파일로 만들어두었기에, 해당 정보를 활용하여 BeanDefinitionMap이라는 MultiValueMap 자료구조에 String, Object형식으로 Bean Object IOC구현.
Application Context = Bean Scope를 Singleton으로 등록하게에, SIngleton Registry라고 하기도 한다.
Singleton -> 동기화 문제 -> stateless형태로 만들어져야 함 -> 단 읽기 변수라면 사용 가능 ( 제약 조건은 final로 선언하는게 좋음 )
Bean Scope : Singleton, prototype, request, session
DI container - > run time시 reflection library를 활용해 생정자 Method 의존관계를 확인후 의존 Bean Obejct를 넣어줌으로써 runtime시의 의존관계를 가능하게 해서 Dependency Injection이라고 한다.
DI 주입 -> Setter 주입, 생성자 주입, 필드 주입 -> 생성자 주입 권장 : 순환참조 방지, 테스트 코드 작성 용이 등 다양한 이점 존재
property -> 설정 같은 값들 정의해서 사용 -> #{value} 형식으로 사용
TEST 작성
junit4 -> is, not, has와 같은 검증 테스트 작성
템플릿
try/catch/finally 문제점 -> 가독성을 해친다 -> 분리 재사용 -> 전략패턴 사용
일반적인 말
자바에서의 Factory : 객체의 생성을 담당하는 곳
한줄평 : 사용 하는 Spring Framework을 알려고 하나하나 디버깅하며 Clone Coding한 경험이 있어서, 그냥 쑥쑥 읽힌다. ? 뭐지 어렵다고 했는데, 아직 초반이라서 그런가 싶다.
'BOOK > 토비의스프링' 카테고리의 다른 글
[1권] 토비의 스프링 6일차 (0) | 2022.08.31 |
---|---|
[1권] 토비의 스프링 5일차 (0) | 2022.08.29 |
[1권] 토비의 스프링 4일차 (0) | 2022.08.28 |
[1권] 토비의 스프링 3일차 (0) | 2022.08.27 |
[1권] 토비의 스프링 2일차 + [2권] 앞부분 (0) | 2022.08.25 |