본문 바로가기

Java27

Custom HandlerMethodArgumentResolver HandlerMethodArgumentResolver HandlerMethodArgumentResolver는 API가 호출될 때 매개 변수를 입력받기 위해 사용하는 Spring에서 제공하는 기능이다. 해당 인터페이스로 가보면 "지정된 요청의 컨텍스트에서 메서드 매개 변수를 인수 값으로 만들기 위한 전략 인터페이스" 라고 설명이 되있다. 즉 우리가 Controller에서 매개 변수를 받기 위해 사용하는 @PathVariable, @RequestParam, @RequestBody 등이 이 인터페이스를 이용해 원하는 값을 얻게 해주는 것이다. HandlerMethodArgumentResolver는 두개의 추상 메소드를 가지고 있다. supportsParameter : 이 Resolver가 지원하는 매개 변수인.. 2021. 6. 8.
함수형 인터페이스를 이용한 Builder Builder 패턴 Java에서 객체를 생성하기 위해선 기본적으로 생성자를 이용한다. 필요에 따라서 파라미터가 없는 생성자, 전체 멤버변수를 입력받는 생성자 또는 일부만 받는 생성자를 사용한다. 하지만 이 생성자를 이용해 객체 생성을 할때 불편함이 좀 있다. 만약 클래스의 멤버변수가 엄청 많을 때, 그리고 상황에 따라서 그 중 일부의 멤버변수만 사용하고 그 사용처가 매우 많다면 각 상황별 생성자를 매번 만들어 주는것은 너무 번거롭다. 이를 해소할 수 있는 방법이 Builder이다. public class Member { private String name; private int age; private String address; public Member() { } public Member(String n.. 2021. 5. 29.
분할 정복 기법 분할 정복 알고리즘 분할 정복은 분할과 정복 그리고 경우에 따라서 통합으로 나눠서 해결하는 것을 말한다. 주어진 문제를 부분으로 나눠서 해결하는 경우가 전체를 한번에 해결하는 경우보다 쉬워지는 성질을 이용한 케이스이다. 분할(Devide) : 해결할 문제를 여러 개의 작은 부분으로 나눔 정복(Conquer) : 나눈 작은 문제를 각각 해결 통합(Combine) : 해결된 해답을 모음 만약 N개의 동전중 무게가 가벼운 가짜 동전이 한개 있을때 이 가짜동전을 찾기위해서 한개씩 대조하는 방법을 사용하면 저울을 최소 1번, 최대 N/2번 사용해야 한다. 이는 시간도 많이 들고 비효율적이다. 가짜 동전을 더 효율적으로 찾기 위해서 분할 정복 기법을 사용할 수 있다. 가짜 동전을 찾기위해 하나의 동전씩만 저울에 올.. 2021. 5. 28.
더 자바(java 8) - CompletableFuture Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 ex) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있다 ex) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다 Java에서 지원하는 Concurrent 프로그래밍 멀티프로세싱 멀티쓰레드 Java 멀디쓰레드 프로그래밍 Thread public class App { public static void main(String[] args) throws InterruptedException { MyThread myThread = new MyThread(); myThread.start(); } static class MyThread extends Thread { public void run(.. 2021. 5. 26.
더 자바(java 8) - Stream, Optional, Date Stream List names = new ArrayList(); names.add("Kang"); names.add("Min"); names.add("Hyeong"); Sequence of elements supporting sequential and parallel aggregate operations 데이터를 담고 있는 저장소(컬렉션)이 아니다 Funtional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다 Stream stringNames1 = names.stream().map(String::toUpperCase); names.forEach(System.out::println); 스트림으로 처리하는 데이터는 오직 한번만 처리한다 Stream stringNames1 = name.. 2021. 5. 19.
toMany 관계에서 필터링 걸기 새로운 회사 프로젝트를 하며 JPA를 도입하며 생겼던 이슈를 해결한 방법을 소개하려 한다. 프로젝트 개발 초기 기본적인 CRUD api들을 만들며 생겼던 일인데 당시 난 아래 코드처럼 조회 api에 여러 필터를 걸며 테스트하고 있었다. Team과 Member는 OneToMany 관계이다. @Test void test2() { QTeam team = QTeam.team; QMember member = QMember.member; JPAQueryFactory query = new JPAQueryFactory(em); List result = query.selectFrom(team) .join(team.members, member) .where(member.age.eq(10)) .fetch(); result... 2021. 5. 13.