티스토리 뷰

반응형

[배워서 바로 쓰는 스프링 프레임워크 - 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> 엘리먼트의 scope 속성값을 prototype으로 설정 
      • 빈이 요청될 때마다 새로운 빈 인스턴스를 생성함
      • 프로토타입 빈이 항상 지연 초기화된다
    • request, session, websocket, application 등,,,
  • 빈에 적합한 스코프 선택하기
    • 빈이 어떤 대화적 상태도 유지하지 않음(상태가 없는 stateless 빈)
      -> 싱글턴 스코프 빈
    • 빈에 대화적 상태를 유지해아 함
      -> 프로토타입 스코프 빈
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함