객체지향 설명
프로젝트 기본 설정
도메인 세팅
주문과 할인
객체지향 원리 적용
다시 처음에 생각했던 부분을 생각해보자. 공연(애플리케이션)에서 각각 인터페이스는 배역이라고 할 수 있다. 그렇다면 이 배역을 연기하는 배우는 구현 객체일 것이다.그런데 실제 배역을 맞는 배우를 선택하는 것은 누가 하는가?현재까지 작성한 코드는 로미오와 줄리엣이라는 공
AppConfig 리팩토링
새로운 구조와 할인 정책 적용, 전체 흐름 정리, 5가지 원칙 확인
IoC, DI, 컨테이너
스프링으로 전환
스프링 컨테이너 생성
\- ac.getBean(빈 이름, 타입) : 빈 이름 & 타입으로 빈 조회\- ac.getBean(타입) : 타입으로만 빈 조회조회 대상 스프링 빈이 없으면 NoSuchBeanDefinitionException 예외가 발생한다!빈 이름 = memberService,
이번에는 동일한 타입이 둘 이상인 경우의 스프링 빈 조회를 알아볼 것이다.타입으로 조회시 같은 타입의 스프링 빈이 둘 이상이면 오류가 발생한다. 이때는 빈 이름을 지정하자.ac.getBean(빈 이름, 타입)으로 조회ac.getBeansOfType()으로 해당 타입의
이번에는 스프링 빈 조회에서 상속 관계에 대해서 배워볼 것이다.부모 타입도 조회하면 자식 타입도 함께 조회된다!!! 🤗🤗모든 자바 객체의 최상위 클래스인 Object 타입으로 조회하면 모든 스프링 빈을 조회한다.이 테스트 클래스 내에서만 사용하기 위해 만든 Conf
이번에는 BeanFactory와 ApplicationContext 그리고 다양한 설정 형식 지원(자바 코드, XML)에 대해 알아볼 것이다.BeanFactory는 스프링 컨테이너의 최상위 인터페이스이다.스프링 빈을 관리, 조회하는 역할을 담당한다.지금까지 우리가 사용했
이번에는 스프링 빈 설정 메타 정보(BeanDefinition)에 대해서 알아볼 것이다. 스프링 빈 설정 메타 정보(BeanDefinition) 스프링이 다양한 설정 형식을 지원할 수 있는 이유는 바로 BeanDefinition이라는 추상화가 있다. > 즉,
이번시간부터 싱글톤 컨테이너에 대해 알아볼 것이다.스프링 : 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다.대부분의 스프링 애플리케이션 = 웹 애플리케이션(웹이 아닌 애플리케이션 개발도 가능하다)웹 애플리케이션 : 보통 여러 고객이 동시에 요청을 한다.고객이 요청
싱글톤 컨테이너 & 싱글톤 방식의 주의점에 대해 알아볼 것이다. (매우 중요)스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하고 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다.지금까지 우리가 학습한 스프링 빈은 싱글톤으로 관리되는 빈이다.스프링 컨테이너는 싱글톤 패턴
// 애플리케이션 설정(구성) 정보1) @Bean memberService 등록 -> memberRepository() -> new MemoryMemberRepository()2) @Bean orderService 등록 -> memberRepository() -> ne
이번 챕터부터 컴포넌트 스캔에 대하여 공부할 것이다.이번에는 컴포넌트 스캔과 의존관계 자동 주입에 대해서 공부해보자.지금까지는 자바 코드의 @Bean이나 XML의 을 통해서 설정 정보에 직접 스프링 빈을 등록했다.예제에서는 등록해야할 스프링 빈이 몇 개가 안됐지만 규모
모든 자바 클래스를 컴포넌트 스캔하면 시간이 오래 걸리므로 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다.basePackages : 탐색할 패키지의 시작위치 지정(해당 패키지 + 하위 패키지)시작 위치를 여러개로 지정할 수 있음 (e.g basePackag
이번에는 중복 등록과 출돌에 대해 공부할 것이다.컴포넌트 스캔에 의해 자동으로 스피링 빈이 등록되었는데, 이름이 같은 경우 스프링은 ConflictingBeanDefinitionException 예외 발생시킨다.MemberServiceImpl와 OrderServiceI
이번 챕터는 의존관계 자동주입으로 다양한 의존관계 주입 방법에 대해서 알아볼 것이다.생성자 주입 -> 가장 많이 사용한다 ☺☺수정자 주입(setter 주입)필드 주입일반 메서드 주입먼저 생성자를 통해서 의존관계를 주입받는 방법이다. (지금까지 우리가 진행했던 방법)1)
옵션 처리와 생성자 주입에 대해서 공부해보자.@Autowired를 사용했지만 주입할 스프링 빈이 없어도 동작해야할 때가 있다. 자동 주입할 대상이 없을 때, @Autowired만 사용하면 오류가 발생한다. (기본적으로 required = true이기 때문!)자동 주입할
개발을 하면 대부분 불변이므로 필드에 final 키워드를 사용하게 된다.생성자 주입 방식은 생성자도 만들어야하고 주입 받은 값을 대입하는 코드도 만들어야하는데, 필드 주입처럼 편하게 사용하기 위해 롬복 라이브러리를 사용한다.1) build.gradle 에 라이브러리 및
@Autowired는 타입으로 조회해 \*\*의존관계를 주입\*\*해준다.DiscountPolicy 타입으로 스프링 빈을 조회해 주석한 코드와 유사하게 동작한다.(실제로는 더 많은 기능 제공)스프링 빈 조회에서 학습했듯이 타입으로만 조회할 때, 선택된 빈이 2개 이상이
실무에서도 종종 애노테이션을 직접 만들어 사용한다.저번 시간 @Qualifier 방식을 적용한 아래 코드를 보면, @Qualifier()안에 문자는 컴파일시 타입 체크가 안된다는 문제가 있다. 이러한 경우, 애노테이션을 만들어 다음과 같은 문제를 해결할 수 있다.@Qu
컴포넌트 스캔을 통한 자동 빈 등록과 의존관계 자동 주입설정 정보를 통한 수동 빈 등록과 의존관계 수동 주입각 방식을 어떠한 경우에 사용해야 할 지 알아보자.스프링은 @Component 뿐 아니라 @Controller, @Service, @Repository 처럼 계층
이번 챕터에서 빈 생명주기에 대해서 배워볼 것이다.
이번 챕터부터는 빈 생명주기에 대해서 알아볼 것이다.데이터베이스 커넥션 풀, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화, 종료 작업이 필요하다.스프링을 통해 초기
기존에는 InitializingBean의 afterPropertiesSet(), DisposableBean의 destory()를 Overriding 하여 사용했는데, 이제는 원하는 이름으로 초기화, 소멸 메서드를 만들 수 있다.초기화 메서드는 init, 소멸 메서드는
NetworkClient 코드 수정@PostConstruct : 초기화 메서드 앞에 추가@PreDestory : 소멸 메서드 앞에 추가@Bean의 속성을 지정하지 않고 그냥 수동 빈 등록을 하면 된다.최신 스프링에서 가장 권장하는 방법이다.애노테이션 하나만 붙이면 되므
이번 챕터부터 빈 스코프에 대해서 배워볼 것이다.지금까지는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 빈 스코프란 빈이 존재할 수 있는 범위
싱글톤 빈과 함께 사용시 Provider로 문제 해결싱글톤 빈과 프로토타입 빈을 함께 사용할 때, 어떻게 하면 사용할 때마다 항상 새로운 프로토타입 빈을 생성하는 방법 3가지에 대해 공부해보자.가장 간단한 방법은 싱글톤 빈이 프로토타입을 사용할 때마다 스프링 컨테이너에
지금까지 싱글톤, 프로토타입 스코프에 대해 학습했다면 이제부터 웹 스코프에 대해서 공부하자.싱글톤은 스프링 컨테이너의 시작과 끝까지 함께하는 매우 긴 스코프이고, 프로토타입은 생성과 의존관계 주입, 초기화까지만 진행하는 특별한 스코프다. 웹 스코프는 웹 환경에서만 동작
ObjectProvider를 사용하도록 코드 수정생성되지 않은 myLogger 의존관계 주입으로 문제가 되었던 LogDemoController 와 LogDemoService의 코드를 ObjectProvider 를 주입받도록 코드를 수정한다. CoreApplicatio
이전에 사용했던 Provider 대신 프록시 방식을 사용한다.🎈 MyLogger 프록시 적용@Scope 속성으로 proxyMode = ScopedProxyMode.TARGET_CLASS 를 추가한다.적용 대상이 클래스 → TARGET_CLASS 선택적용 대상이 인터페