티스토리 뷰
반응형
[배워서 바로 쓰는 스프링 프레임워크 - www.yes24.com/Product/Goods/90051375]
2. '인터페이스를 사용하는 프로그래밍' 설계 원칙
- 긴밀한 결합(coupling) : 의존 중인 클래스가 의존 관계의 구체적인 클래스를 직접 참조
- 의존 관계의 구현을 변경하려면 의존 중인 클래스도 변경해야한다
- 자바 인터페이스는 구현 클래스가 준수해야 하는 계약을 정의한다
- 클래스가 의존 관계를 구현하는 인터페이스에 의존한다면 해당 의존 관계의 구현을 변경하더라도 의존 중인 클래스를 변경할 필요가 없다
- 인터페이스를 사용하는 프로그래밍(programming to interface)
- 의존 중인 클래스가 의존 관계가 구현하는 인스턴스로 의존성을 만드는 설계 원칙
- 느슨한 결합을 만든다
- 의존 관계 인터페이스에 목 구현을 사용함으로써 의존 중인 클래스를 단위 테스트하기 위해 인프라를 설치하는 노력을 줄일 수 있다
- '인터페이스를 사용하는 프로그래밍' 설계 방식 지원
- 의존 관계에 구체적인 구현 클래스가 아닌 의존 관계 인터페이스를 참조하는 빈 클래스를 만든다
- 의존 중인 빈에 주입하고 싶은 구체적인 구현을 지정할 수 있는 <bean> 엘리먼트를 정의한다
3. 정적 팩토리 메서드나 인스턴스 팩토리 메서드를 사용해 빈 만들기
- 스프링 컨테이너는 인수가 없는 생성자 지원 여부에 상관없이 클래스의 인스턴스를 만들고 관리할 수 있다
4. 생성자 기반 DI
- 세터 기반 DI : setter 메소드로 의존 관계를 주입하는 DI기법
- <property> 엘리먼트를 사용해 빈 의존 관계 설정
- 생성자 기반 DI
- 생성자 기반 DI에서는 빈의 의존 관계를 빈 클래스 생성자의 인수로 전달한다
- 생성자의 인수는 클래스의 의존 관계를 표현
- <constructor-arg> 엘리먼트로 인스턴스의 생정자에 전달할 인수 지정
- 생성자 기반 DI와 세터 기반 DI를 함께 사용하기
- <constructor-arg>와 <property> 엘리먼트를 조합해 의존 관계를 주입
5. 설정 정보를 빈에 전달하기
<bean id="emailMessageSender" class="EmailMessageSender">
<property name="host" value="smtp.gmail.com"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
</bean>
- <property>
- value 속성은 name 속성이 정한 이름에 맞는 빈 프로퍼티의 값을 지정
<bean id="emailMessageSender" class="EmailMessageSender">
<constructor-arg index="0" value="smtp.gail.com"/>
<constructor-arg index="1" value="myusername"/>
<constructor-arg index="2" value="mypassword"/>
</bean>
- <constructor-arg>
- value 속성은 index 속성이 가리키는 생성자 인수에 설장할 값
6. 빈 스코프
- <bean> 엘리먼트의 scope 속성을 통해 정의하며, scope를 지정하지 않으면 싱글턴 스코프로 지정된다
- 스코프는 빈 인스턴스의 수명을 결정한다
- 종류
- 싱글턴 스코프(디폴트 스코프)
- <bean>의 scope 속성을 지정하지 않거나 singletone으로 지정
- 빈을 공유하기 위한 인스턴스를 단 하나만 만듦
- 스프링 컨테이너가 생성될 때 함께 생성되고, 스프링 컨테이너가 파괴될 때 함께 파괴된다
- 스프링 컨테이너는 싱글턴 스코프 빈의 인스턴스를 단 하나만 만들고 그 빈에 의존하는 모든 빈에 유일한 인스턴스를 공유한다
- 여러 스프링 컨테이너에 있는 싱글턴 스코프 빈
- 싱글턴 스코프 빈 인스턴스의 존재 범위는 한 스프링 컨테이너 인스턴스 내부로 제한된다
- 스프링 컨테이너는 빈 정의마다 하나의 인스턴스를 생성한다
- 싱글턴 스코프 빈을 지연 생성하기
- <bean>의 lazy-init 속성은 빈 인스턴스를 지연 생성할지 미리 생성할지 지정한다
- true면 스프링 컨테이너는 빈을 처음 요청받았을 때 인스턴스를 생성한다
- <bean>의 lazy-init 속성은 빈 인스턴스를 지연 생성할지 미리 생성할지 지정한다
- 프로토타입 스코프
- <bean> 엘리먼트의 scope 속성값을 prototype으로 설정
- 빈이 요청될 때마다 새로운 빈 인스턴스를 생성함
- 프로토타입 빈이 항상 지연 초기화된다
- request, session, websocket, application 등,,,
- 싱글턴 스코프(디폴트 스코프)
- 빈에 적합한 스코프 선택하기
- 빈이 어떤 대화적 상태도 유지하지 않음(상태가 없는 stateless 빈)
-> 싱글턴 스코프 빈 - 빈에 대화적 상태를 유지해아 함
-> 프로토타입 스코프 빈
- 빈이 어떤 대화적 상태도 유지하지 않음(상태가 없는 stateless 빈)
반응형
'study > 배워서 바로 쓰는 스프링 프레임워크' 카테고리의 다른 글
Chapter06. 애너테이션 기반 개발 (0) | 2021.07.26 |
---|---|
Chapter05. 빈과 빈 정의 커스텀화하기 (0) | 2021.07.12 |
Chapter04. 의존 관계 주입 (0) | 2021.07.11 |
Chapter03. 빈 설정 (0) | 2021.05.24 |
Chapter01. 스프링 프레임워크 소개 (0) | 2021.01.16 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 도커
- 도메인주도설계
- 코틀린
- kotlin
- docker
- 자바
- JavaScript
- java
- 자바스크립트
- 쿠버네티스
- 스프링
- Spring
- Kubernetes
- springboot
- clean code
- k8s
- docker pull limit
- QuickTimePlayer
- gasmask
- gradle
- kotlin In Action
- 스프링부트
- IntelliJ
- 클린코드
- ddd
- docker for mac
- back merge
- ImagePullBackOff
- cacheable
- linuxkit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함