본문 바로가기

Java

Spring StopWatch StopWatch stopWatch = new StopWatch("id"); stopWatch.start("taskName1"); task1(); stopWatch.stop(); stopWatch.start("taskName2"); task2(); stopWatch.stop(); stopWatch.getTotalTimeMillis(); // 전체 작업시간 stopWatch.prettyPrint(); // StopWatch 'id': running time (millis) = 2000 // ----------------------------------------- // ms % Task name // ----------------------------------------- // 01000 050% tas..
Spring에서 Annotation으로 정의된 Validation 확인 Spring을 사용하면서 DTO를 정의하고 DTO의 필드에 validation을 추가한 경우에, 필요에 따라 validation을 직접 호출해야하는 경우가 발생할 수 있다. 예를 들어 카프카에서 사용하는 DTO의 필드 값이 유효한지 확인해야 하는 경우, 일반적인 Controller API의 경우를 따를 수 없었다. 이에 stack overflow에 해결책이 올라온 것을 확인하였고, 이를 적용하였다. 예를 들어 사용자 정보를 생성하는 Request에 대해 아래와 같이 DTO를 정의하였다. @Getter @AllArgsConstructor public class UserCreateRequestDTO { @NotEmpty(message = "name is mandatory value.") private Str..
ParallelStream의 결과를 List에 저장 ParallelStream은 Java에서 제공하고 있는 Stream 중 하나로 Collection 속의 데이터를 병렬 처리하기 위해서 사용된다. 최근에 팀에서 ParallelStream을 사용하던 코드에서 이슈가 있었는데, ParallelStream으로 처리된 결과를 List에 저장하여 추가적인 작업으로 후처리하려다가 문제가 발생한 것이다. 간단한 코드로 옮겨보자면 다음과 같은 구조의 코드였다. import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { List numbers = new ArrayList(); for (int i = 0; i < 100000;..
Lombok 시작하기 Lombok에 대해 소개하고 있는 Project Lombok 공식 페이지에 접속하면 아래와 같은 Lombok에 대한 소개가 나와있다. Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. 간단히 의미를 살펴보자면 Lombok은 에디터와 빌드 도구들에 자동으로 연결되는 Java ..
Java Reflection 사용하기 (7) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html 배열의 사용reflection의 마지막 단계는 배열을 만들고 조작하는 것입니다. Java에서의 배열은 특수한 형태의 class이며, 배열 참조는 객체 참조로 할당할 수 있습니다. 배열이 작동하는 방식을 확인하기 위해 아래의 예시를 생각해보겠습니다. import java.lang.reflect.*; public class array1 { public s..
Java Reflection 사용하기 (6) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflection https://www.oracle.com/technetwork/articles/java/javareflection-1536171.html 새로운 객체 생성하기 생성자를 호출하는 것은 새로운 객체를 생성한다는 측면에서 단순한 함수 호출과는 다르다고 할 수 있습니다. (정확히는 새 객체를 만든다는 것은 메모리 할당과 객체의 생성을 포함하는 것입니다.) 그렇기 때문에 앞의 함수 호출의 예와 최대한 유사한 예시를 찾아보면 아래와 같습니다. import java.lang.reflect.*; p..
Java Reflection 사용하기 (5) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html 이름으로 함수 호출하기지금까지의 포스팅은 모두 reflection을 이용하여 class 정보를 가져오는 것이었지만, 단순히 정보를 가져오는 것에서 그치는 것이 아니라 이름을 이용하여 함수를 호출하는 등의 다른 활용방법도 존재합니다. import java.lang.reflect.*; public class method2 { public int add(i..
Java Reflection 사용하기 (4) 이 문서는 Oracle Technology Network에 포스팅되었던 Using Java Reflection을 참고하여 작성되었습니다. 원문은 아래의 링크에서 확인하실 수 있습니다. Using Java Reflectionhttps://www.oracle.com/technetwork/articles/java/javareflection-1536171.html Class Field 정보 가져오기Reflection을 이용하면 class에 정의된 data field 정보도 확인할 수 있습니다. import java.lang.reflect.*; public class field1 { private double d; public static final int i = 37; String s = "testing"; p..