728x90
빈 스코프 스코프란 빈이 존재할 수 있는 범위를 뜻하며,스프링은 기본적으로 싱글톤 스코프로 생성되며 그 외에 다양한 스코프도 지원한다. 종류- `싱글톤` 스코프- `프로토타입` 스코프- `웹` 스코프 빈 스코프 지정 방법// 컴포넌트 스캔 자동 등록@Scope("prototype")@Componentpublic class HelloBean {}// 수동 등록@Scope("prototype")@BeanPrototypeBean HelloBean() { return new HelloBean();} 싱글톤 스코프- 싱글톤의 빈을 요청하면 스프링 컨테이너는 `항상 같은 인스턴스`를 반환한다.- 같은 객체가 사용되어 성능 최적화를 이룬다.- 컨테이너가 빈의 생명주기를 관리한다. (@PreDestory 호출 O) ..
빈 생명주기 콜백 스프링이 기본적으로 생성하는 `싱글톤 스코프`로 설명을 이어나가겠다. 스프링 빈은 생성된 후 바로 사용할 수 없고, 특정 빈은 초기화 과정이 필요하다.(ex: DB 연결, 네트워크 연결 등)또한 스프링 빈은 컨테이너가 종료되기 전 자원을 안전하게 해제하는 소멸 과정이 필요하다. 초기화 콜백, 소멸 콜백초기화 콜백 : 스프링이 의존관계 주입을 완료하면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려준다.소멸 콜백 : 스프링 컨테이너가 종료되기 직전에 알려준다. 스프링 빈의 이벤트 라이프 사이클스프링 컨테이너 생성 > 스프링 빈 생성 > 의존관계 주입 > 초기화 콜백 > 사용 > 소멸 콜백 > 스프링 종료 > 참고 - 객체의 생성과 초기화는 분리하는 것이 좋다.(단순한 경우 X, 외부..
특정 타입의 빈을 동적으로 가져오는 방법class DiscountService { private final Map policyMap; private final List policies; public DiscountService(Map policyMap, List policies) { this.policyMap = policyMap; this.policies = policies; System.out.println("policyMap = " + policyMap); System.out.println("policies = " + policies); } /** policyMap = {rateDiscountPolicy=RateDiscountPolicy@xxxx, fixDiscoun..
@Autowired 에서 조회되는 빈이 2개 이상일 때@Autowired- 타입을 기준으로 조회하기 때문에 같은 타입의 빈이 2개 이상이면 `@NoUniqueBeanDefinitionException` 오류가 발생한다. 조회 대상 빈이 2개 이상일 때 해결 방법- @Autowired 필드명 또는 파라미터명을 이용한 매칭 (거의 사용 X)- @Qualifier 를 이용한 명확한 구분 - @Primary 를 이용한 기본 빈 설정 @Autowired 필드명 또는 파라미터명을 이용한 매칭 (거의 사용 X) - 타입 매칭 시도 > 필드명 / 파라미터 명으로 매칭 시도@Autowiredprivate DiscountPolicy rateDiscountPolicy @Qualifier 를 이용한 명확한 구분 - 추가적인..
롬복- 생성자, @Autowired, get / set, toString 등 코드를 최적화할 수 있는 라이브러리이다.- 자바의 애노테이션 프로세서라는 기능을 이용하여 컴파일 시점에 코드를 자동으로 생성해준다. 롬복 적용 방법1. build.gradle 에 아래의 코드를 추가한다.2. 플러그인에서 `lombok`을 설치한다.3. 설정 > preferences > annotation processors > enable annotation processing 체크한다. > 참고 - 처음에 스프링 스타터에서 프로젝트 생성할 때 dependencies 에서 lombok 을 선택할 수 있다.configurations { compileOnly { extendsFrom annotationProcess..
스프링 컨테이너 (애노테이션 기반 자바 코드 설정)// 스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); `ApplicationContext`를 스프링 컨테이너라고 한다.이때, ApplicationContext 는 인터페이스이며, AnnotationConfigApplicationContext 는 인터페이스의 구현체이다.스프링 컨테이너는 생성자가 클래스 정보를 받으면, 해당 클래스가 스프링 빈으로 자동 등록된다. 스프링 컨테이너는 두 가지 방식으로 설정할 수 있다.1. `XML 기반` (거의 사용 X)2. `애노테이션 기반의 자바 설정 클래스` (거의 대부분) 스프..
빈 출력하기모든 빈 출력하기@Test@DisplayName("모든 빈 출력하기")void findAllBean() { String[] beanDefinitionNames = ac.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { Object bean = ac.getBean(beanDefinitionName); System.out.println("name=" + beanDefinitionName + " object=" + bean); }}스프링에 등록된 모든 빈 정보를 출력할 수 있다. 애플리케이션 빈 출력하기@Test@DisplayName("모든 빈 출력하기")void findAllBean..
[프로그래머스] (Java) 배달 - 다익스트라 알고리즘 문제 설명N개의 마을로 이뤄진 나라는 아래의 특징을 지닌다.각 마을에는 1 ~ N까지 번호가 각각 하나씩 부여되어 있다.각 마을은 양방향 도로로 연결되어 있다.도로를 지날 때 소요되는 시간은 도로별로 다르다.1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 할 때, N개 마을 중에서 K시간 이하로 배달이 가능한 마을의 개수를 구하려고 한다. 예를 들어, N = 5, K = 3인 경우 위와 같은 마을이 있다면,1번 마을에 있는 음식점은 [1, 2, 4, 5] 번 마을까지 3 이하의 시간에 배달할 수 있다. 그러나 3번 마을은 3시간이 초과되므로 3번 마을에서는 주문을 받지 않아, 최종적으로 주문을 받을 수 있는 마을의 개수는 4개가 된다. ..