본문 바로가기

java

CompletableFuture 사용법 CompletableFuture는 Java8에 등장했다. Future와 CompletionStage를 구현했다. 따라서 비동기 연산들을 구성, 결합 실행하고 에러를 처리하는 메소드를 가지고 있다. 간단히 비동기 코드를 실행하고 싶다면, CompletableFuture의 runAsync, supplyAsync 함수를 사용한다. runAsync 는 return 타입이 없는 Runnable을 매개변수로 받고, supplyAsync는 return 타입이 있는 Supplier를 매개변수로 받는다. CompletableFuture future = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000); } catch (Exception e) { e.print.. 더보기
apache HttpClient, javax.net.ssl.SSLHandshakeException 발생시 대처법 HttpClient 를 이용하여 https 페이지를 접속하려 할때 아래와 같은 예외가 발생하기도 한다. javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:320) at ja.. 더보기
for each 문에 대하여 iterator() 메소드가 존재하는 class는 모두 for each 문을 사용 할 수 있다. 다른말로 바꿔하면 어떤 class 던지 Iterable 인터페이스를 구현(iterator() 메서드 구현)하였으면 for each 문을 사용 할 수 있다. for each 문의 기본 사용법은 아래와 같다. ArrayList ar = new ArrayList(); ar.add("a"); ar.add("b"); ar.add("c"); for(String str: ar){ System.out.println(str); } 만약 어떤 class를 for each 문이 사용 가능한 class로 만들고 싶다면 아래와 같이 Iterable 를 구현하면 된다. public class StockBox implements Ite.. 더보기
Java 날짜 연산 Calendar cal = Calendar.getInstance(); //이번 달 int month = cal.get(Caledar.MONTH); //오늘 날자 int day = cal.get(Calendar.DATE); //올해 int yr = cal.get(Calendar.YEAR); //2달 더하기 cal.add(Calendar.MONTH, 2) //3일 빼기 cal.add(Calendar.DATE, -3) //15시간 더하기 cal.add(Calendar.HOUR, 15) //두 날짜의 차이 구하기 Calendar cal2 = Calendar.getInstance(); long mil = Math.abs(cal.getTimeInMillis() - cal2.getTimeInMillis()) //시로.. 더보기
Matcher를 이용해 문자열 검색, 치환 하기 문자열 에서 특정 패턴을 검색하려고 할 때는 java.util.regex.Matcher를 사용한다. Matcher를 사용하기 위해서는 우선 정규식을 이용한 java.util.regex.Pattern을 먼저 생성하고 고 해당 Pattern 으로 부터 Matcher를 생성한다. 우선 예제를 살펴 보자 import java.util.regex.Pattern; import java.util.regex.Matcher; public static void main(String[] args){ String str = "I love Java 7!!"; Pattern pattern = Pattern.compile("I love .*[0-9]!"); Matcher matcher = pattern.matcher(str); S.. 더보기
사장된 기능 표시하기 프로그램 버전이 올라가면서 다른 함수로 대체되거나 사용하지 않게되는 함수들이 있는데 이를 표시 할 때 사용한다. 아래와 같이 @Deprecated 어노테이션을 사용하면 된다. /** * 함수설명 * @param a * @return result * @deprecated 새로추가된 newFunction(int)를 사용 해야 함 */ @Deprecated public String function(int a){ return String.valueOf(a) } 더보기
Cassandra - Java를 이용하여 데이터 검색 조회 함수 Cassandra.Client 의 어떤 칼럼 값으로 데이터를 조회하고 싶은 경우 list get_indexed_slices(ColumnParent column_parent, IndexClause index_clause, SlicePredicate predicate, ConsistencyLevel consistency_level) 어떤 키의 범위로 데이터를 조회하고 싶은 경우 list get_range_slices(ColumnParent column_parent, SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level) 두 함수를 사용하면 된다. e.g. city 칼럼 값이 "NY"인 row를 조회하고싶은 경우 g.. 더보기
Cassandra - Java를 이용하여 데이터 쓰기 (super column family) Super Column Family 란 ??? 보통 Column Family는 row key를 가지고 column들을 가진다. 하지만 Super Column Family는 row key와 Super Column을 가진다. 그림으로 보면... 일반 Column Family 위와 같은 구조에 데이터는 아래와 같이 입력된다. Super Column Family 위와 같은 구조에 아래와 같이 데이터가 입력된다. join이 없는 대신 super column family가 있나 싶다. 어떤 경우 사용하면 유리한지 카산드라 설계 레퍼런스 자료가 있다면 보고싶다. 입력 함수 일반 Column Family에 입력할때보다 조금 복잡하다. Cassandra.Client의 batch_mutate 함수를 사용하는데 필요한 파라.. 더보기