본문 바로가기

Learning-log126

(스프링 핵심 원리 - 기본편) 7-(2) 옵션 처리, (3)생성자 주입을 선택해라! - 옵션 처리 주입할 스프링 빈이 없어도 동작해야 할 때 @Autowired만 사용하면 required 옵션의 기본값이 true이므로 오류 발생 자동 주입 대상을 옵션으로 처리하는 방법 @Autowired(required = false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨(실행 안하고 지나감) @Nullable : 자동 주할 대상이 없으면 null 입력됨 Optional : 자동 주입할 대상이 없으면 Optional.empty가 입력됨 아래는 member가 스프링 빈이 아니지만 실행에 성공함. - 생성자 주입을 선택해라! 예전에는 수정자 주입과 필드 주입을 많이 사용했지만, 요즘은 생성자 주입 권장 이유는? 불변하기 때문 대부분 의존관계 주입은 한번 일어나면 애플리케이션 종료까.. 2023. 4. 7.
(스프링 핵심 원리 - 기본편) 7-(1) 다양한 의존관계 주입 방법 - 다양한 의존관계 주입 방법 스프링은 스프링 빈을 등록하는 단계와 의존관계 주입하는 단계로 나뉨. 생성자 주입 생성자를 통해 의존관계 주입 지금까지 해오던 것. 특징 생성자 호출 시점에 딱 1번만 호출 되는 것이 보장됨 불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면 @Autowired 생략해도 자동 주입(스프링 빈에만 해당) 수정자 주입(setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 의존관계 주입 특징 선택, 변경 가능성이 있는 의존 관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용 만약 수정자 내의 주입하려는 객체가 자바빈에 등록이 안되어있어도 사용 가능 @Autowired 는 기본적으로 주입할 대상이 없으면 오류 발생. 이를 주입할 대상이 .. 2023. 4. 6.
(스프링 핵심 원리 - 기본편) 6-(2)탐색 위치와 기본 스캔 대상, (3)필터 ,(4) 중복 등록과 충돌 - 탐색 위치와 기본 스캔 대상 모든 자바 클래스를 다 컴포넌트 스캔하면 오래걸리므로 시작위치를 지정하는 방법 사용 backPackages : 탐색할 패키지의 시작위치 지정해서 그 패키지와 하위 패키지까지 모두 탐색. basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위로 지정 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치로 지정 권장 방법 패키지를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 방법 스프링 부트도 이 방법을 제공 컴포넌트 스캔 기본 대상(괄호 : 컴포넌트 스캔 외의 기능) @Component 뿐만 아니라 아래 목록도 대상에 포함 @Controller : 스프링 MVC컨트롤러에서 사용(스프링 mvc 컨트롤.. 2023. 4. 6.
(Java) SWEA 5650. 핀볼 게임 1. 문제 조건 어릴 때 하던 핀볼 게임을 코드로 구현해야 하는 문제. 핀볼 게임 판이 테스트케이스로 주어지며, 각 번호마다 핀볼 판의 상태를 나타내준다. 0번은 아무 블록도, 홀도 없는 상태 1번 ~ 5번은 각 번호에 해당되는 블록이 존재하며 블록에 모양에 따라 핀볼이 꺾이는 방향이 달라진다.(대각선 부분은 90도로, 아닌 부분은 반대방향으로 핀볼이 튕겨나가게 됨) 6번 ~ 10번은 나온다면 웜홀로 항상 두 개씩 나오며 같은 번호인 웜홀로 핀볼의 방향은 유지한 채 이동하게 된다. -1번은 블랙홀이며 블랙홀을 지나가면 핀볼이 빨려들어감으로써 게임이 끝나게 된다. 게임이 끝나는 조건은 처음 위치에 핀볼이 되돌아오거나 핀볼이 빨려들어가거나 두가지이다. (명심할 것) 또한, 핀볼은 상하좌우 이렇게 네 방향으로.. 2023. 4. 5.
(스프링 핵심 원리 - 기본편) 6-(1)@컴포넌트 스캔과 의존관계 자동 주입 시작하기 - 컴포넌트 스캔과 의존관계 자동주입 시작하기 스프링 빈을 등록할 때 지금까지는 자바 코드의 @Bean이나 XML의 을 통해 직접 등록할 스프링 빈을 나열하는 방식 사용함. 하지만 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 된다면 귀찮을 뿐만 아니라 누락 문제도 발생 그래서 스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공함 컴포넌트 스캔 사용법 : @ComponentScan 붙이기 @Configuration도 컴포넌트 스캔의 대상이 된 이유도 @Configuration의 소스코드를 열어보면 @Component 애노테이션이 붙어있기 때문 이전에 Config 사용했을 때는 @Bean으로 직접 설정 정보 작성, 의존관계도 직접 명시 Component를 이용하면 이런.. 2023. 4. 4.
(스프링 핵심 원리 - 기본편) 5-(5)@Configuration과 싱글톤 (6)@Configuration과 바이트코드 조작의 마법 - @Configuration과 싱글톤 @Bean memberService 를 호출하면 memberRepository() 를 호출하면서, new MemoryMemberRepository() 호출 @Bean orderService()를 호출하면 memberRepository()와 discountPolicy()를 호출하면서, new new MemoryMemberRepository() 와 new RateDiscountPolicy() 호출 위 과정을 살펴보면 마치 싱글톤이 깨지는 것처럼 보임. 스프링 컨테이너는 이를 어떻게 해결할까? 실험을 해보자 ! 테스트용으로 MemberServiceImpl과 에 getMemberRepository() 메서드 생성 위 테스트 결과 세 객체가 모두 같은 객체임을 확인할 수 있.. 2023. 4. 4.