JAVA/JAVA 21

CompletableFuture

ParallelStream VS CompletableFuture 병렬 처리에 영향을 미치는 다음 3가지 요인을 잘 살펴보아야 한다. 1) 요소의 수와 요소당 처리 시간 컬렉션에 요소의 수가 적고 요소당 처리 시간이 짧으면 순차 처리가 오히려 병렬 처리보다 빠를 수 있음. 병렬 처리는 스레드풀 생성, 스레드 생성이라는 추가적인 비용이 발생하기 때문 2) 스트림 소스의 종류 ArrayList, 배열은 인덱스로 요소를 관리하기 때문에 포크 단계에서 요소를 쉽게 분리할 수 있어 병렬 처리 시간이 절약된다. 반면 HashSet, TreeSet은 요소 분리가 쉽지 않고, LinkedList 역시 링크를 따라가야 하므로 요소 분리가 쉽지 않음. 따라서 이 소스들은 ArrayList, 배열보다는 상대적으로 병렬 처리가..

JAVA/JAVA 2020.11.13

queryDsl QClass 빌드 설정(gradle)

검색해서 적용한 설정들 대부분 Java 파일로 생성되어, class 파일로 정상 빌드가 되지 않는 경우가 많다. 아래와 같이 하면 대부분의 경우 정상적으로 qClass가 생성되었다. queryDslSrcDir 선언 부분이 가장 중요하니 주의깊게 보자 def queryDslSrcDir = "$buildDir/generated" querydsl { library = 'com.querydsl:querydsl-apt' jpa = true querydslSourcesDir = queryDslSrcDir } sourceSets { main { java { srcDirs = ['src/main/java', queryDslSrcDir] } } } task deleteGeneratedSources(type: Delete..

JAVA/JAVA 2020.11.11

HashMap 반복문 조회

HashMap을 반복문을 통해 조회하는 방법을 확인한다. 대부분 keySet을 사용하여 조회하지만, Map에서 Key에 해당하는 값을 조회하는 비용이 추가로 발생하므로, 왠만하면 entrySet 사용을 추천한다. HashMap map = new HashMap(); map.put("a", 1); map.put("b", 2); map.put("c", 3); // keySet을 사용한 조회 (키에 해당하는 값을 Map에서 재조회하는 비용이 추가로 소모된다) for (String s : map.keySet()) { System.out.println(s + "/" + map.get(s)); } System.out.println("-----"); // entrySet을 사용한 조회 (Map 재조회에 대한 비용 소모..

JAVA/JAVA 2020.11.09

Integral division result cast to double or float

ㅇDouble 캐스트 위치에 따른 결과값 주의 메시지 간단히 코드로 결과값을 보자 코드 Long totalCount = 10L; Integer countPerPage = 4; System.out.println("----------"); System.out.println((double) (totalCount / countPerPage)); System.out.println(Math.round((double) (totalCount / countPerPage))); System.out.println("----------"); System.out.println(totalCount / (double) countPerPage); System.out.println(Math.round(totalCount / (doub..

JAVA/JAVA 2020.11.09

용어정리

플렉션(Reflection) 로딩이 완료된 클래스에서 또 다른 클래스를 동적으로 로딩(Dynamic Loading)하여 사용하는것. Class.forName("클래스이름").newInstance 인터프리터(interpreter) 자바 컴파일러에 의해 변환된 자바 바이트 코드(.class)를 읽고 해석하는 역할 클래스 로더(Class Loader) 동적으로 클래스를 로딩해주는 역할 JIT 컴파일러(Just-In-time compiler) 프로그램이 실행중인 런타임에 실제 기계어로 변환해주는 컴파일러 동적 번역(Dynamic Translation)이라고도 불리며, 프로그램 실행 속도를 향상시키기 위해 개발됨 자바 컴파일러가 생성한 자바 바이트 코드를 런타임에 기계어로 변환하는데 사용 JVM 실행 과정 OS로..

JAVA/JAVA 2020.06.10

Java Application 중복 실행 방지(배치 프로그램)

자바 프로그램 중복 실행으로 문제가 발행하지 않게 하기 위한 대처 방법입니다. Spring Batch는 자동으로 PORT 설정이되어 실행되므로 문제가 없을것이라 판단되나, 일반적인 자바 배치 프로그램은 실행중 여부에 상관없이 몇개든 실행이 되도록 되어있습니다. 중복 실행 방지에 대한 다양한 방법이 있으나 1. 프로그램실행시 Temp 파일 체크 및 생성 2. PORT 점유 3. DB Flag 설정 등등.... 가장 안정적이며 확실한 방법중 하나인 PORT 점유에 대해 설명하려고 합니다. 임의의 PORT를 점유하여 사용하게 되며, 프로그램 실행시 해당 PORT 사용 가능여부에 따라 배치 실행, 종료가 결정됩니다. 반드시 실행중인 다른 프로그램이 사용하지 않는 PORT를 사용해야하며, 해당 서버 정보에 명시를..

JAVA/JAVA 2020.06.04

NIO 파일, 폴더 생성

// Create Folder Path newFolderPath = Paths.get("D:\\Desktop\\test"); if(Files.exists(newFolderPath) && Files.isDirectory(newFolderPath)){ System.out.println("폴더가 존재합니다."); }else{ Files.createDirectory(newFolderPath); System.out.println("폴더가 생성되었습니다."); } // Create File Path newPath = Paths.get("D:\\Desktop\\새 폴더 (6)\\isTest.txt"); if(Files.exists(newPath)){ System.out.println("파일이 존재합니다."); }el..

JAVA/JAVA 2020.06.04