분류 전체보기176 (스프링 핵심 원리 - 기본편) 7-(7) 애노테이션 직접 만들기, (8) 조회한 빈이 모드 필요할 때, List, Map, (9) 자동, 수동의 올바른 실무 운영 기준 - 애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안됨. 이런 경우 애노테이션을 직접 만들어서 해결 가능 애노테이션은 상속이라는 개념이 없음 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원하는 기능인 것. Autowired도 재정의 가능. 하지만 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하면 유지 보수에 혼란을 줄 수 있으므로 삼가자. - 조회한 빈이 모드 필요할 때, List, Map 예제 할인 서비스 제공 시, 클라이언트가 할인의 종류를 선택할 수 있다고 가정 스프링을 사용하면 전략 패턴 간단히 구현 가능 public class AllBeanTest { @Test void findAllBean(.. 2023. 4. 9. (스프링 핵심 원리 - 기본편) 7-(4) 롬복과 최신 트랜드, (5)조회 빈이 2개 이상 - 문제, (6)@Autowired필드 명, @Qualifier, @Primary - 롬복과 최신 트랜드 개발의 대부분은 다 불변, 그래서 생성자에 final을 사용하게 됨 그런데 생성자도 만들어야하고 주입 받은 값을 대입하는 코드도 만들어야 하는데 필드 주입처럼 편하게 사용하는 방법은? 기존의 OrderServiceImpl코드를 최적화해보자. 최적화 전 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy.. 2023. 4. 8. (스프링 핵심 원리 - 기본편) 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. 이전 1 ··· 11 12 13 14 15 16 17 ··· 30 다음