JAVA 86

휴대폰번호 마스킹 처리

/** * 핸드폰번호 masking 후 리턴 * 변환 실패시 입력값 그대로 리턴 * */ public String maskingPhoneNumber(String phoneNumber){ try{ if(StringUtils.isEmpty(phoneNumber)){ return phoneNumber; } phoneNumber = phoneNumber.replaceAll("[^0-9]",""); // 숫자만 추출 if(!(phoneNumber.length() == 10 || phoneNumber.length() == 11)){ return phoneNumber; } if(phoneNumber.length() == 10){ // 10자리인 경우. 000-***-0000로 지환 return phoneNumber...

JAVA/JAVA 2021.03.09

Stream 객체 값 변경 예제

아래와 같이 사용하고, map().collect()를 사용하지 않아도 된다. String, Integer는 아래와 같은 방식으로는 구현이 불가능하며, map().collect()를 사용하자 static class Person{ private String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } @Test void test(){ List personList = Arrays.asList(new Person("1"), new Person("2")); // 객체 값 변경 전 출력 p..

JAVA/Java Stream 2020.11.30

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