-
lombok : @Builder , @SuperBuilderSpring Boot 🍃 2023. 12. 1. 00:01
강의 실습 중에 도메인 패키지의 엔티티 파일들에서 공통으로 사용되는 메타 필드를 하나의 파일로 분리해서 상속받아 사용하는 부분이 있었는데, 이 때 @Builder 어노테이션 사용 시 엔티티를 builder()로 호출해서 사용할 때 상속하는 엔티티의 필드를 사용할 수 없는 문제가 있었다. 검색해보니 @Builder는 해당 어노테이션이 붙은 클래스에 있는 필드만 사용할 수 있게 해주고, 해당 클래스의 부모 클래스의 필드는 무시된다고 한다. 부모 자식 클래스에 속한 모든 필드에 대해서 builder()를 적용하려면 @SuperBuilder 어노테이션 사용시 가능해진다고 한다. @Builder 각 필드에 대한 Setter 메서드를 포함하는 빌더 클래스를 생성하도록 Lombok에 알려주는 어노테이션이다. 이 어노..
-
Mockito : ArgumentCaptorSpring Boot 🍃 2023. 12. 1. 00:01
Mockito🍸의 mocking에 사용되는 클래스이다. 메서드 호출에 사용되는 인자에 대해서 검증하고 싶을 때, ArgumentCaptor 를 사용할 수 있다. 과제 프로젝트에 사용된 부분을 가져와서 본다면 // given ArgumentCaptor captor = ArgumentCaptor.forClass(Transaction.class); // when transactionService.saveFailedUseTransaction("1000000000", USE_AMOUNT); // then verify(transactionRepository, times(1)).save(captor.capture()); assertEquals(USE_AMOUNT, captor.getValue().getAmount()..
-
UUID.randomUUID()Language/Java 2023. 12. 1. 00:01
보고 배운 곳 : offbyone.tistory UUID 클래스를 사용해서 유일한 식별자를 생성할 수 있다. 숫자 일련번호를 사용한 식별자도 각각의 데이터를 구분하는데 충분하지만, 다른 데이터를 유추하기 쉽다는 단점이 있다. UUID는 아래 3가지 경우에 사용 될 수 있다. 업로드된 파일명의 중복을 방지하기 위해 파일명을 변경할 때 사용. 첨부파일 파일 다운로드시 다른 파일을 예측하여 다운로드하는것을 방지하는데 사용. 일련번호 대신 유추하기 힘든 식별자를 사용하여 다른 컨텐츠의 임의 접근을 방지하는데 사용. UUID 클래스의 randomUUID() 메서드를 호출해야 하고, 이 때 반환값이 객체이기 때문에, 문자열 값만 필요할 경우 toString() 메서드를 활용해주어야 한다. UUID.randomUUI..
-
-
에러 기록 : ObjectMapper는 기본생성자를 요구에러기록 2023. 12. 1. 00:01
휴 스프링 쉽지 않다 Request processing failed HttpMessageConversionException Type definition error [simple type, class com.zhyun.account.dto.CreateAccount$Request] 😠 이 에러는 코드에 사용된 dto.CreateAccount$Request 클래스에 기본 생성자가 없어서 난 에러였다. 보고 배운곳 : 7357.tistory ObjectMapper가 @RequestBody를 바인딩할 때 기본 생성자를 사용하기 때문에, ObjectMapper를 사용할 때는 사용할 객체에 기본 생성자를 선언해주어야 한다. 나의 경우 @AllArgConstructor 어노테이션만 붙어있었기 때문에, 기본 생성자가 붙..
-
배열의 원소만큼 추가하기코딩테스트 문제 풀이/프로그래머스 2023. 12. 1. 00:01
그냥 풀면 쉬운 문제인데 Stream을 사용하려고 하니까 너무 어려운 문제였다. Chat 코드 🙈 import java.util.Arrays; import java.util.stream.IntStream; class Solution { public int[] solution(int[] arr) { return Arrays .stream(arr) .boxed() .flatMapToInt(i -> IntStream.range(0, i).map(n -> i)) .toArray(); } } int 배열을 boxed()를 사용해서 wrapper 객체 배열로 변환 한 뒤, flatMapToInt() 메서드를 사용하여 값을 만들고 toArray() 메서드를 사용하여 int배열로 반환하는 코드를 만들어냈다. flatM..
-
꼬리 문자열코딩테스트 문제 풀이/프로그래머스 2023. 12. 1. 00:01
내 코드 import java.util.Arrays; import java.util.stream.Collectors; class Solution { public String solution(String[] str_list, String ex) { return Arrays .stream(str_list) .filter(s -> !s.contains(ex)) .collect(Collectors.joining()); } } 오 세상에 또 풀렸다 진짜 기분 좋음 🤓✏️ 새로 알게 된 메서드 collect(Collectors.joining()) 스트림의 모든 요소를 하나의 문자열로 합쳐주는 기능을 한다. 이 메서드는 3가지 형태로 사용할 수 있다. 1. 기본형태 collect(Collectors.joining()..
-
뒤에서 5등까지코딩테스트 문제 풀이/프로그래머스 2023. 12. 1. 00:01
내 코드 import java.util.Arrays; class Solution { public int[] solution(int[] num_list) { return Arrays .stream(num_list) .sorted() .limit(5) .toArray(); } } 와우 스트림으로 처음 풀어봄! 🙈 뭔가 디비 쿼리짜는 기분이다 🙊 그런데 소요 시간이 많이 길어진 느낌이 들어서 확인해보았다. 👇이건 스트림으로 작성한 결과 이건 스트림 사용하지 않고 Arrays만 사용 import java.util.Arrays; class Solution { public int[] solution(int[] num_list) { Arrays.sort(num_list); return Arrays.copyOf(num..
-
StreamLanguage/Java 2023. 12. 1. 00:01
스트림이란? 배열, 컬렉션 대상으로 연산을 수행 컬렉션은 기본으로 stream()을 호출할 수 있다. 배열은 Arrays 이용! 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 한다. 자료 처리에 대한 추상화가 구현되었다고 한다. 한번 생성하고 사용한 스트림은 재사용 할 수 없음 스트림 연산은 기존 자료를 변경하지 않는다. 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간은 별도로 생성되므로 연산이 수행되도 기존 자료에 대한 변경은 발생하지 않는다. 스트림 연산은 중간 연산과 최종 연산으로 구분된다. 중간 연산은 여러 개의 연산이 적용될 수 있지만, 마지막 연산은 단 하나만 적용할 수 있다. 최종 연산이 호출되어야 중간 연산에 대한 수행이 이루어 지고 , 그 결과가 만들어진다. 이런 연산을 ..