본문 바로가기
반응형

Study44

람다 표현식(Lambda Experessions) 정리 람다 표현식(Lambda Experessions) 함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있는 자바8에서 제공하는 강력한 문법 개선 기능입니다. 람다 표현식이 있기 이전에는 하나의 함수만 사용하고 싶어도 클래스를 생성하는 코드를 짰어야 했습니다. 람다 표현식을 사용하면 일급 객체로써 다루어지는 익명 함수를 간단한 코드로 생성할 수 있습니다. 람다식이 평가(evaluation)되면 그 결과 Functional Interface의 인스턴스를 생성합니다. 람다식의 처리 결과는 표현식 몸통을 실행하는 것이 아닙니다. 대신 나중에 이 Functional Interface의 적절한 메서드가 실제 호출(invoke)될 때 표현식 몸통의 실행이 일어게 됩니다. *일급 객체란? 일급 객체(영어: firs.. 2021. 2. 8.
함수형 인터페이스(Functional Interface) 정리 함수형 인터페이스(Functional Interface) 함수형 인터페이스는 Object 클래스의 메서드를 제외하고 추상 메소드를 하나만 가지고 있는 인터페이스이다. 다른 말로 SAM(Single Abstract Method) 인터페이스라고도 한다. 함수형 인터페이스 예시 @FunctionalInterface public interface RunSomething { void doIt(); static void printName() { System.out.println("Kyeongho"); } default void printAge() { System.out.println("40"); } } @FunctionalInterface 어노테이션을 붙이면 함수형 인터페이스라 간주하고 추상 메소드가 두 개 이상되.. 2021. 2. 8.
Spring REST Docs 개념 및 간단한 예제 Introduction Spring REST Docs는 정확하고 가독성 좋은 REST 문서를 제공하는 것을 목표로 한 Spring 프로젝트 중 하나이다. Asciidoctor를 활용하여 테스트코드를 adoc으로 변환한 후 HTML로 변환시켜 주는데, 대안으로 Spring REST Docs는 Markdown을 사용할 수도 있다. 참고! adoc(Asciidoc)은 Markdown과 마찬가지로 문서 작성을 위한 경량형 마크업 언어입니다. 문서 자체는 .adoc 확장자의 text문서에 불과하고, Asciidoctor(https://asciidoctor.org/) 를 이용해 html이나 pdf등으로 변환하여 활용할 수 있다. 기본적으로 Spring MVC의 test freamwork에서 제공하는 MockMvc로.. 2021. 2. 2.
QueryDSL(3) - 프로젝션, distinct, 동적 쿼리, 벌크 연산 프로젝션 프로젝션과 기본 결과 반환 프로젝션 대상이 하나인 경우 @Test public void simpleProjection() { List result = queryFactory .select(member.username) .from(member) .fetch(); } 타입을 명확하게 지정할 수 있음. 프로젝션 대상이 둘 이상이면 Tuple이나 DTO로 조회해야함 프로젝션 대상이 둘 이상일 경우 Tuple로 조회 @Test public void tupleProjection() { List result = queryFactory .select(member.username, member.age) .from(member) .fetch(); for (Tuple tuple : result) { String u.. 2021. 1. 26.
QueryDSL(2) - 쿼리 생성 방법, 기본 문법 기본 Q-Type 활용 쿼리 타입(Q)은 사용하기 편리하도록 기본 인스턴스를 보관하고 있다. 하지만 같은 엔티티를 조인하거나 같은 엔티티를 서브쿼리에 사용할 때 사용하면 별칭이 겹치기 때문에 따로 별칭을 주입하여 생성해줘야 한다. 쿼리 타입(Q) 사용 예제 QMember qMember = new QMemeber("m"); // 직접 지정 QMember qMember = new Qmember.member; // 기본 인스턴스 사용 아래와 같이 쿼리 타입의 기본 인스턴스를 import static을 활용해서 사용하면 코드를 더 간결하게 작성할 수 있다. import static ...Qmember.member; // 기본 인스턴스 static import ... public void qtype() { Ent.. 2021. 1. 25.
QueryDSL(1)- QueryDSL과 설정 방법 QueryDSL QueryDSL은 JPA 표준에서 지원하는 Criteria 기술처럼 JPQL 빌더 역할을 해주는 오픈소스 프로젝트이다. 기존의 JPQL처럼 문자로 작성하는 것이 아닌 자바 코드로 JPQL을 작성할 수 있도록 해주어 문법 오류를 컴파일 단계에서 잡을 수 있고 IDE의 자동완성 기능의 도움을 받을 수 있는 등 여러가지 장점이 있다. 또한 Criteria에 비해 복잡성이 낮다. 쿼리를 문자가 아닌 코드로 작성해도 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있게 해준다. QueryDSL 설정 필자는 프로젝트 설정 시 메이븐을 주로 사용하기에 메이븐을 위주로 설정 방법을 다루겠다. 먼저 pom.xml에 다음과 같이 의존성을 추가한다. com.querydsl querydsl-apt ${qu.. 2021. 1. 25.
Spring Data JPA(2) - JpaRepository 쿼리 메소드 기능 해당 포스팅은 [ 자바 ORM 표준 JPA 프로그래밍 - 김영한 저 ]를 학습한 내용을 바탕으로 정리한 글입니다. 쿼리 메소드 기능 쿼리 메소드 기능은 스프링 데이터 JPA가 제공하는 특별한 기능이다. 크게 3가지 기능이 있다. 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용하여 레포지토리 인터페이스에 쿼리 직접 정의 이 기능들을 활용하면 인터페이스만으로 필요한 대부분의 쿼리 기능을 개발할 수 있다. 1. 메소드 이름으로 쿼리 생성 예시를 들어보자. 이름과 나이로 회원을 조회하려면 다음과 같이 메소드 이름을 정의하면 된다. List findByUsernameAndAge(String username, int age); 인터페이스에 정의한 findBy.. 2021. 1. 20.
Spring Data JPA(1) - Spring Data JPA와 JpaRepository 인터페이스의 공통 기능 해당 포스팅은 [ 자바 ORM 표준 JPA 프로그래밍 - 김영한 저 ]를 학습한 내용을 바탕으로 정리한 글입니다. 순수 JPA 기반 리포지토리로 개발 시 문제 @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public Member save(Member member) { ... } public Member find(Long id) { ... } public void delete(Member member) { ... } public List findAll() { ... } public long count() { ... } public List findByUsername(String user.. 2021. 1. 20.
JPA - OSIV(Open Session In View) 정리 OSIV(Open Session In View) OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 영속성 컨텍스트가 유지되면 엔티티도 영속 상태로 유지된다. 뷰까지 영속성 컨텍스트가 살아있다면 뷰에서도 지연 로딩을 사용할 수가 있다. ! JPA에서는 OEIV(Open EntityManager In View), 하이버네이트에선 OSIV(Open Session In View)라고 한다. 하지만 관례상 둘 다 OSIV로 부른다. OSIV 동작 원리 OSIV의 동작 방식에 대해서 Spring Framework가 제공하는 OSIV을 통해 알아보겠다. 스프링이 제공하는 OSIV 클래스는 서블릿 필터에서 적용할지 스프링 인터셉터에서 적용할지에 따라 원하는 클래스를 선택해서.. 2021. 1. 18.
반응형