본문 바로가기

전체 글221

[스프링] 의존관계 조회(Dependency Lookup) : ObjectFactory, ObjectProvider, JSR-330 Provider @Autowired HelloService helloService; 스프링에서 위와 같이 외부로부터 의존 관계를 주입받는 것을 의존성 주입이라고 한다. 또한 외부로부터 주입받는 것이 아닌 내가 필요할 때 직접 의존 관계를 찾을 수도 있는데 이것을 '의존관계 조회(Dependency Lookup)'이라고 하고, 의존 관계 조회를 사용하는 3가지 방법을 알아보도록 하자. 스프링에서 제공 : ObjectFactory, ObjectProvider 자바 표준 : JSR-330 Provider ObjectFactory @FunctionalInterface public interface ObjectFactory { T getObject() throws BeansException; } ObjectFactory의 get.. 2021. 3. 8.
[자바 스터디] 15주차 과제 - 람다식(lambda expression) 본 게시글은 백기선 님의 live-study 과제를 수행하면서 작성한 글입니다. 목표 자바의 람다식에 대해 학습하세요. 학습할 것 (필수) 람다식 사용법 함수형 인터페이스 Variable Capture 메서드, 생성자 레퍼런스 람다식이란? 자바 8에서 추가된 람다식은 메서드를 하나의 '식(Expression)'으로 표현한 것이다. 람다식의 등장으로 메서드를 보다 간략하게 표현할 수 있게 되었으며, 메서드를 변수처럼 매개변수로 전달하거나 반환 값으로 받을 수도 있게 되었다. 예를 들어 두 정수 중에서 큰 값을 반환하는 메서드가 있다고 하자. int max(int a, int b) { return a > b ? a : b; } 위 메서드를 람다식으로 바꾸면 다음과 같다. (int a, int b) -> { .. 2021. 3. 5.
스프링 @Autowired : 같은 타입의 빈이 여러개라면?(@Qualifier, @Primary) 스프링에서 자동 의존성 주입을 사용할 때, 같은 타입의 빈이 여러 개 조회되는 상황에 도움이 되는 몇 가지에 대해 알아보자. 목차 @Autowired @Qualifier @Primary 같은 타입의 빈을 모두 조회하고싶다면? @Autowired 의존성 자동 주입에 사용되는 애노테이션인 @Autowired는 먼저 애노테이션이 적용된 필드, 파라미터의 타입을 기준으로 빈을 조회한다. 같은 타입의 빈이 여러 개 조회되면 추가적으로 필드 또는 파라미터의 이름으로 빈을 조회한다. 다음과 같이 HelloService 인터페이스와 두 개의 구현체가 있다. public interface HelloService { String hello(); } @Component public class HelloServiceEng i.. 2021. 2. 26.
[자바 스터디] 14주차 과제 - 제네릭(Generic) 본 게시글은 백기선 님의 live-study 과제를 수행하면서 작성한 글입니다. 목표 자바의 제네릭에 대해 학습하세요. 학습할 것 (필수) 제네릭 사용법 제네릭 주요 개념 (바운디드 타입, 와일드 카드) 제네릭 메서드 만들기 Erasure 제네릭이란? JDK1.5에 도입된 제네릭은 다양한 타입의 메서드나 컬렉션 클래스에 컴파일 시에 타입을 체크해주는 기능이다. 객체의 타입을 컴파일 시에 체크해줌으로써 의도치 않은 타입의 객체가 저장되는 것을 막아 타입 안정성을 높이고, 다른 타입으로 잘못 형변환되어 발생할 수 있는 오류를 줄여준다. 간단히 이야기하면 사용할 객체의 타입을 미리 명시해줌으로써 번거로운 형변환을 줄여준다. 제네릭의 장점 타입 안정성을 제공한다. 타입 체크와 형변환을 생략할 수 있다. 제네릭 .. 2021. 2. 26.
JPA JPQL 페치 조인(fetch join) JPA에서 일반적인 조인을 사용하면 연관된 엔티티는 함께 조회하지 않는다. 그렇기 때문에 N+1 문제가 발생할 수 있는데, 페치 조인을 사용하면 연관된 엔티티를 한 번의 쿼리로 모두 가져올 수 있다. 참고로 N+1 문제란 하나의 쿼리를 날리는데 조회되는 결과의 개수만큼의 쿼리가 추가적으로 나가는 것을 말한다. Member 엔티티와 Team 엔티티가 1:N 단방향 연관 관계를 가지는 상황을 예로 들어보자. Member 엔티티 @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = F.. 2021. 2. 21.