분류 전체보기
-
빌더 패턴(Builder Pattern)Design Pattern 2022. 3. 19. 05:22
이번에는 마지막으로 이전에서 본 점층적 생성자 패턴과 자바 빈 패턴의 장점(안정성 + 가독성)을 결합한 빌더 패턴을 알아보겠습니다. public class User { //회원 ID(필수) private int id; //회원 이름(필수) private String userName; //회원 별명(선택) private String nickName; //회원 사물함번호(선택) private int lockerNumber; public User(Builder builder){ this.id = builder.id; this.userName = builder.userName; this.nickName = builder.nickName; this.lockerNumber = builder.lockerNumber;..
-
자바 빈 패턴(JavaBeans Pattern)Design Pattern 2022. 3. 19. 04:58
이전 글에서 본 점층적 생성자 패턴(Telescoping Constructor Pattern) 단점을 보안한 자바 빈 패턴에 대하여 알아보겠습니다. public class User { //회원 ID(필수) private int id; //회원 이름(필수) private String userName; //회원 별명(선택) private String nickName; //회원 사물함번호(선택) private int lockerNumber; public User() { } public void setId(int id) { this.id = id; } public void setUserName(String userName) { this.userName = userName; } public void setNick..
-
점층적 생성자 패턴(Telescoping Constructor Pattern)Design Pattern 2022. 3. 19. 02:16
클래스를 설계할 때 필수로 받아야 할 인자와 선택적으로 받아야 할 인자가 구분될 때 JAVA에서, 이러한 클래스들을 객체화하는 3가지 디자인 패턴을 알아보겠습니다. 이중 가장 먼저 점층적 생성자 패턴을 먼저 알아보겠습니다. public class User { //회원 ID(필수) private int id; //회원 이름(필수) private String userName; //회원 별명(선택) private String nickName; //회원 사물함번호(선택) private int lockerNumber; //필수 매개뱐수를 받는 생성자 public User(int id, String userName){ this(id,userName,null); } public User(int id, String u..
-
자바 람다식이란(Lambda expression)JAVA/람다식(Lambda expression) 2022. 2. 7. 22:53
JDK1.8부터 추가된 람다식(Lambda expression)은 간단히 말해서 메서드를 하나의 식(expression)으로 표현한 것입니다. 람다식의 도입으로 인해, 자바는 객체지향 언어인 동시에 함수형 언어가 되었습니다. 또한, 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해줍니다. 이러한 람다식은 메서드의 이름과 반환 값이 없어지므로, '익명 함수(anonymous function)'라고도 합니다. 익명 함수란? 말그대로 함수의 이름이 없는 함수입니다. 익명 함수들은 모두 일급객체 입니다. 더보기 일급 객체가 되기 위한 조건 3가지 : 1. 함수/메서드의 매개변수(parameter)로서 전달할 수 있는가 2. 함수/메서드의 반환 값(return)이 될 수 있는가 3. 변수에 담을 수 ..
-
스프링 부트 Querydsl 설정하기SPRING/Querydsl 2021. 12. 7. 21:39
우선 간단하게 Querydsl이 뭔지 알아보고 설정하는 법을 보여드리겠습니다. Querydsl 이란 이전에 Spring boot + Spring data jpa 기술들의 조합으로 해결하지 못하는 한계점을 해결하기 위해 나온 프레임워크입니다. (JPQL 빌더 역할을 해주는 오픈소스 프로젝트) 한계점이란, 실무에서는 당연히 복잡한 쿼리를 다루게 될 수도 있고, 조건에 따라 복잡한 동적 쿼리들을 생성할 일이 많을 수 있습니다. 이런 문제들을 해결할수 있는 기술이 바로 Querydsl입니다. 또한 Querydsl의 큰 장점은 쿼리를 "자바 코드"로 작성하여 문법 오류를 컴파일 시점에 확인할 수 있습니다. 이러한 Querydsl을 사용을 사용하려면 다음과 같은 설정 작업을 하셔야 합니다. build.gradle ..
-
@EntityGraph 사용법SPRING/JPA 2021. 12. 6. 19:34
EntityGraph는 페치 조인(FETCH JOIN)의 간편 버전이라고 생각하면 됩니다. EntityGraph의 4가지 사용법을 알아보겠습니다. [ 이전 글(페치조인 설명)을 꼭 참고해주세요. ] 저번 시간에 이어 먼저 MemberRepository를 살펴보겠습니다. 첫 번째 방법 27라인을 보시면 엔티티 그래프가 추가 되었습니다. 이전과는 달리 [ @Query("...") 페치 조인을 위한 JPQL쿼리를 ] 짜지 않고 @EntityGraph를 이용하여 페치 조인을 사용할 수 있습니다. 바로 테스트해보겠습니다. 결과 이전 페치조인과 동일한 결과를 얻을 수 있습니다. 두 번째 방법 31라인을 보시면 엔티티 그래프 사용 두 번째가 추가되었습니다. 이번에는 JPQL과 엔티티 그래프를 같이 사용하는 방법입니다..
-
페치조인(fetch Join )이란SPRING/JPA 2021. 12. 3. 02:24
페치(fetch)조인은 SQL에서 사용하는 조인의 종류는 아니고 JPQL에서 성능 최적화를 위해 제공하는 기능입니다. 이것은 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능인데 join fetch 명령어로 사용할 수 있습니다. 페치 조인을 사용해서 회원(Member) 엔티티를 조회하면서 연관된 팀(Team) 엔티티도 함께 조회하는 JPQL을 실행해보겠습니다. 이해를 돕기 위해 회원, 팀 엔티티부터 순서대로 살펴보겠습니다. 23~25 라인을 보시면 Team엔티티와 N:1 관계, 지연 로딩으로 설정되어 있는걸을 확인하실 수 있습니다. (FetchType.LAZY) 23~24 라인을 보시면 Member엔티티와 양방향 매핑으로 되어있다는 것을 확인하실수 있습니다. 다음으로는 MemberRepository를..
-
API예외처리 하는법2(global)처리 - @ControllerAdvice, @RestControllerAdviceSPRING/API 예외처리 2021. 10. 30. 11:03
스프링 부트에서 API예외처리를 글로벌하게 처리하는 방법을 알아보겠습니다. 이전 글 에서는 해당 컨트롤러에서만 예외 처리 적용이 되게 설정을 하였다면, 이번 글에선 글로벌하게 처리하는 법을 알아보겠습니다. [이전 스프링 부트에서 API예외 처리하는 법 글을 보지 않으셨던 분은 꼭 보고 와 주세요!] 우선 이전 코드를 보겠습니다. 보시다시피 정상 코드와 예외처리 코드가 하나의 컨트롤러에 섞여있습니다. 정상 코드와 예외 처리 코드를 분리하고 싶다면 @ControllerAdvice 또는 @RestControllerAdvice를 사용하면 둘을 분리할 수 있습니다. 이 둘의 차이점을 보기 위해 RestControllerAdvice 내부 코드를 캡처 @ControllerAdvice는 대상으로 지정한 여러 컨트롤러에..