Tips/Java 6

Lambda를 이용한 Lazy Initialization

Functional Programming in Java 8 책의 6장에 Lambda를 이용하여 Lazy Initialization을 하는 방법이 나온다.이 예제는 Heavy 객체의 생성을 Supplier 인터페이스를 이용해서 사용할 시점까지 지연시키는 예제다.하지만 이 예제는 Heavy 클래스가 아닌 또 다른 heavy한 객체를 생성해야 할 때 매번 해당 클래스에 대한 HeavyInstanceHolder 클래스를 만들어 주어햐 하는 단점이 있다. Jake라는 분이 이를 해결한 방법 Blog로 정리해 놓았다. 요점은 Heavy 클래스를 Lazy로 생성하는 부분을 T 형 타입으로 받아서 처리하면 된다. 그런데 synchronized 키워드를 붙여 thread-safe 하게 처리한 부분이 좀 이상해서 gith..

Tips/Java 2016.09.02

Files.find를 이용하여 디렉토리 내 모든 파일 리스트 출력하기

Files 클래스에는 Java 8에서 추가된 find라는 메소드가 있다.Funtional Programmin in Java 8 책의 3장에 ListSubDir.java 예제가 있는데, 해당 디렉토리의 하부 디렉토리까지만 가져오므로 완전한 예가 아니다.find를 이용해서 어떤 디렉토리에 존재하는 모든 파일을 가져오도록 Stream API를 이용하여 작성해 보자.Path start = Paths.get(".");int maxDepth = 5; // Integer.MAX_VALUE로 하면 모든 파일을 가져올 수 있다Files.find(start, maxDepth, (path, attr) -> true) .forEach(System.out::println);만약 어떤 특정 파일 속성을 가지는 파일만 가져오고 싶..

Tips/Java 2016.09.01

[JAVA] 문자열 내에서 숫자만 분리하기

String 클래스의 split 함수와 정규표현식을 이용해서 문자열 내에 들어 있는 숫자들만 추려보자. 자바 소스를 보면 String.split() 메쏘드는 내부적으로 Pattern클래스의 split 메쏘드를 사용한다. 즉, 사용자가 Pattern 클래스를 이용하지 않고 사용하기 편하게 만들어 놓았을 뿐. public String[] split(String regex, int limit) { return Pattern.compile(regex).split(this, limit); } public String[] split(String regex) { return split(regex, 0); } 예제 코드를 보자. @Test public void split() { String text = "blah 11..

Tips/Java 2014.05.09

[JAVA] Regular Expression (정규 표현식) 예제

정규 표현식을 사용하면 코드 양을 획기적으로 줄일 수 있다. 이번 기회에 Java에서 지원하는 정규표현식을 정리해 본다. 일단 Java 정규표현식 문서는 아래 링크를 참조. (JAVA SE7기준) http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 문서에 사용예제가 있다. Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches(); 정규표현식의 기본 형식에 대해 테스트 코드를 만들어 보았습니다. (첨부 소스에 빠진 예제가 많은데, 혹시 예제로 표현해 주실 분은 댓글로 남겨주시면 감사하겠습니다.) IP주소: ((([0-9])|(..

Tips/Java 2013.03.16

[JAVA] 정규표현식 - URL

JAVA에서 URL 정규표현식을 알아보자. (발췌: http://goodidea.tistory.com/86) 원문에서는 마지막에 http://www.daum.net 과 같이 URL 마지막에 슬래쉬(/)가 없는 예에서는 에러가 난다. 이를 수정하면 아래와 같이 된다. ^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$ JAVA 테스트 코드로 바꾸면 다음과 같다. @Test public void url() { String regex = "^(https?):\\/\\/([^:\\/\\s]+)(:([^\\/]*))?((\\/[^\\s/\\/]+)*)?\\/?([^#\\s\\?]*)(\\?([^#\\..

Tips/Java 2013.03.15