분류 전체보기
-
Java - 람다식Java/java study 2022. 4. 10. 21:28
람다식 사용법 함수형 인터페이스 Variable Capture 메서드, 생성자 레퍼런스 람다식이란? 람다식은 JDK 1.8부터 추가된 것으로 메서드를 하나의 '식(expression)'으로 표현한 것이다. 람다식을 사용함으로써 코드가 간결해지고 또한 가독성이 증가되는 여러 이점등이 있다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 람다식을 익명함수(anonymous function)라고도 한다. 람다식의 특징 익명 - 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. - 구현해야 할 코드에 대한 걱정거리가 줄어듬 함수 - 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 불린다. - 메서드처럼 파라미터 리스트, 바디, 반환형식, 가능한 예외 리스트를 포함한다. 전달 ..
-
Java - 제네릭(Generics)Java/java study 2022. 4. 3. 22:26
제네릭(Generics) 제네릭 사용법 제네릭 - 바운디드 타입 제네릭 - 와일드카드 제네릭 메서드 제네릭(Generics)란? 지네릭스는 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형 변환의 번거로움을 줄일 수 있다. - 타입 안정성 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 원래의 타입과 다른 타입으로 잘못 형 변환되어 발생할 수 있는 오류를 줄여준다. - 제네릭을 사용하는 이유 제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있기 때문 자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을..
-
Java - Input과 Output(I/O)Java/java study 2022. 3. 27. 23:13
Input과 Output 스트림(Stream) / 버퍼(Buffer) / 채널(Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림(System.in, System.out, System.err) 파일 읽고 쓰기 I/O(Input/Output) I/O 란? I/O란 Input과 Output의 약자로 입력과 출력, 간단히 입출력이라 한다. I/O를 이용하여 시스템은 컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 스트림(stream) 스트림이란 데이터를 운반하는데 사용되는 연결 통로이다. 자바에서 데이터를 전달하고자 할 때, 두 대상을 연결하고 데이터를 전송할 수 있는 통로가 필요한데 이것을 스트림(strea..
-
Querydsl - Spring Data JPA에서 제공하는 페이징 활용Spring/Querydsl 2022. 3. 26. 22:10
Spring Data JPA에서 제공하는 페이징 활용 QueryDSl에서 페이징 사용 Count 쿼리 최적화 Controller 개발 QueryDSL에서 페이징 사용 1. 커스텀 인터페이스에 메서드 추가 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); Page searchPage(MemberSearchCondition condition, Pageable pageable);// (1) } (1) : Pageable 페이징에 필요한 정보 전달(offset, limit) 2. 커스텀 인터페이스 구현체에서 메서드 구현 @Override public Page searchPage(MemberSearchCon..
-
Querydsl - Spring Data JPA와 QueryDSLSpring/Querydsl 2022. 3. 26. 21:10
Spring Data JPA와 QueryDSL Spring Data JPA를 사용할 때 QueryDSL을 사용하기 위해선 사용자 정의 리포지토리와 구현체를 만들어 상속받아야 한다. QueryDSL을 사용하기 위한 순서 JpaRepository를 상속받는 인터페이스 생성 Spring Data JPA에서 제공하는 JpaRepository 인터페이스를 상속받는 인터페이스 생성한다. public interface MemberRepository extends JpaRepository { } 사용자 정의 인터페이스 생성 QueryDSL을 사용하기 위해 필요한 인터페이스 생성 public interface MemberRepositoryCustom { List search(MemberSearchCondition con..
-
Querydsl - where절을 이용한 동적 쿼리와 성능 최적화Spring/Querydsl 2022. 3. 26. 18:19
where절을 이용한 동적 쿼리와 성능 최적화 Member와 Team을 동적 쿼리를 이용하여 해당 조건에 맞는 데이터를 가져와 보자 1. 성능 최적화를 위해 DB에서 필요한 데이터만 가져올 수 있는 DTO를 생성한다. @Data public class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; public MemberTeamDto() { } @QueryProjection// (1) public MemberTeamDto(Long memberId, String username, int age, Long teamId, Strin..
-
Querydsl - BooleanBuilder를 사용한 동적 쿼리와 성능 최적화Spring/Querydsl 2022. 3. 26. 17:16
BooleanBuilder를 사용한 동적 쿼리와 성능 최적화 Member와 Team을 동적 쿼리를 이용하여 해당 조건에 맞는 데이터를 가져와 보자. 1. 성능 최적화를 위해 DB에서 필요한 데이터만 가져올 수 있는 DTO를 생성한다. @Data public class MemberTeamDto { private Long memberId; private String username; private int age; private Long teamId; private String teamName; public MemberTeamDto() { } @QueryProjection// (1) public MemberTeamDto(Long memberId, String username, int age, Long team..
-
Querydsl - Repository에서 Querydsl 사용하기Spring/Querydsl 2022. 3. 26. 16:21
Repository에서 Querydsl 사용하기 Querydsl을 사용하기 위해서는 JPAQueryFactory가 필요한데 Qeurydsl을 사용하는 Repository에서 주입받을려면 불편하다. 따라서 Config를 생성하여 JPAQueryFactory를 bean으로 등록하고 사용할 Repository에서 생성자 주입받는 것을 추천한다. @Configuration public class JpaConfig { @Bean JPAQueryFactory jpaQueryFactory(EntityManager em) { return new JPAQueryFactory(em); } } 참고로 동시성 문제는 문제가 없다. 스프링이 주입해주는 EntityManager는 실제 동작 시점에 진짜 EntityManager를..