스프링 핵심 원리 기본편 - AppConfig

2024. 4. 29. 11:28· 인프런 김영한 강의 정리/스프링 핵심원리 기본편
목차
  1. 1. AppConfig 란?
  2. 2. AppConfig의 필요성
  3. 3. 구체클래스에 의존하는 예제 코드
  4. 4. 생성 경로
  5. 5. AppConfig 코드
  6. 6. 인터페이스에만 의존하는 코드
728x90

1. AppConfig 란?

- 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 책임을 가지는 별도의 설정 클래스
 

2. AppConfig의 필요성

- 클라이언트 코드는 구체클래스에 의존하면 안된다.(인터페이스에만 의존해야한다.)
 

3. 구체클래스에 의존하는 예제 코드

public class OrderServiceImpl implements OrderService {
// private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); 
private final DiscountPolicy discountPolicy = new RateDiscountPolicy();
}

위 코드를 보면 DiscountPolicy가 구현객체인 FixDiscountPolicy와 RateDiscountPolicy를 직접 호출하고 있다.
이렇게 되면 객체지향 방법론의 장점인 "추상화"를 놓치게 되는 것이다.
 

4. 생성 경로

 
hello.core 바로 밑에 생성해준다.
 

5. AppConfig 코드

package hello.core;

import hello.core.discount.DiscountPolicy;
import hello.core.discount.RateDiscountPolicy;
import hello.core.member.MemberRepository;
import hello.core.member.MemberService;
import hello.core.member.MemberServiceImpl;
import hello.core.member.MemoryMemberRepository;
import hello.core.order.OrderService;
import hello.core.order.OrderServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

	@Bean
	public MemberService memberService() {
		return new MemberServiceImpl(memberRepository());
	}

	@Bean
	public OrderService orderService() {
		return new OrderServiceImpl(
			memberRepository(),
			discountPolicy());
	}

	@Bean
	public MemberRepository memberRepository() {
		return new MemoryMemberRepository();
	}

	@Bean
	public DiscountPolicy discountPolicy() {
		return new RateDiscountPolicy();
	}
}

 
1. AppConfig에는 실제 기능에 필요한 구현 객체를 만들어준다.
2. 생성자를 통해 연결해준다.
3. 구성 정보에서 역할과 구현을 명확하게 분리해준다.
4. @Configuration - AppConfig에서 설정을 구성한다는 뜻.
    @Bean - 스프링 컨테이너에 스프링 빈으로 등록한다.
(💡 @Bean어노테이션을 쓰면 일반 자바 코드만 사용하는 경우에 비해 애플리케이션의 구성 요소들을 더 잘 통합하고 관리할 수 있게 된다.)
 

6. 인터페이스에만 의존하는 코드

public class OrderServiceImpl implements OrderService{

    //회원 저장소와 할인정책이 필요
    private  final MemberRepository memberRepository;
    private DiscountPolicy discountPolicy;

    //생성자를 통해 구현체를 연결한다.
    public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }
    ...
}

 
OrderServiceImpl은 더이상 구현 객체에 의존하지 않는다.
객체의 생성과 연결은 AppConfig가 담당한다.

728x90

'인프런 김영한 강의 정리 > 스프링 핵심원리 기본편' 카테고리의 다른 글

스프링 핵심 원리 기본편 - 의존관계 자동 주입(2)|옵션처리  (0) 2024.05.04
스프링 핵심원리 기본편 - 의존관계 자동 주입(1)|다양한 의존관계 주입방법  (0) 2024.05.02
스프링 핵심원리 기본편 - 컴포넌트 스캔  (0) 2024.05.01
스프링 핵심 원리 기본편 - 싱글톤 패턴과 스프링 컨테이너  (0) 2024.04.30
[스프링 핵심원리] 객체 지향 프로그래밍(SOLID)  (0) 2024.03.14
  1. 1. AppConfig 란?
  2. 2. AppConfig의 필요성
  3. 3. 구체클래스에 의존하는 예제 코드
  4. 4. 생성 경로
  5. 5. AppConfig 코드
  6. 6. 인터페이스에만 의존하는 코드
'인프런 김영한 강의 정리/스프링 핵심원리 기본편' 카테고리의 다른 글
  • 스프링 핵심원리 기본편 - 의존관계 자동 주입(1)|다양한 의존관계 주입방법
  • 스프링 핵심원리 기본편 - 컴포넌트 스캔
  • 스프링 핵심 원리 기본편 - 싱글톤 패턴과 스프링 컨테이너
  • [스프링 핵심원리] 객체 지향 프로그래밍(SOLID)
백엔드 개발자 - 젤리곰
백엔드 개발자 - 젤리곰
오늘도 배움이 있는 하루가 되길 바라는 개발자
백엔드 개발자 - 젤리곰
backend-gummyBear
백엔드 개발자 - 젤리곰
전체
오늘
어제
  • 분류 전체보기 (144)
    • 인프런 김영한 강의 정리 (60)
      • 스프링 핵심원리 기본편 (12)
      • 모든 개발자를 위한 HTTP 웹 기본 지식 (10)
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (3)
      • 자바 ORM 표준 JPA 프로그래밍 기본편 (28)
      • 실전! Querydsl (6)
    • Spring (2)
    • 프로젝트일지 (6)
    • 프로그래밍 언어 (20)
      • Java (17)
      • JavaScript (3)
      • Python (0)
    • 데이터베이스 (4)
      • Oracle (2)
      • ORM (1)
      • SQL 튜닝 (1)
    • 형상관리 (1)
      • Git (0)
    • 알고리즘&자료구조 (34)
      • Algorithm (31)
      • Data Structure (1)
    • CS지식 (4)
    • Cloud (5)
    • 일기 (7)
      • 공부 일기 (3)
      • 독서 일기 (2)
      • 마음 일기 (2)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • SublimeText단축키
  • 객체지향방법론
  • 데이터베이스정규화
  • 인터페이스
  • 클라이언트서버통신
  • 스프링컨텍스트
  • 프론트엔드개발자업무
  • 프론트엔드역사
  • #{}와${}의차이
  • 업캐스팅
  • 힙자료구조
  • LeetCode200번
  • 다운캐스팅
  • dfs알고리즘
  • jquery와javascript
  • 인프콘
  • 커스텀annotation
  • 객체지향의사실과오해
  • LeetCode17번
  • ORM프레임워크

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
백엔드 개발자 - 젤리곰
스프링 핵심 원리 기본편 - AppConfig
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.