본문 바로가기

Programming/Java

maven - set properties file content from command line 1. enable filtering of resources like below (아래와 같이 resource filtering 을 활성화 시킨다) src/main/resources true 2. then, declare a place holder in your src/main/resources/my.properties, like below.(properties 파일에 대입할 변수를 아래와 같이, 선언한다 => ${db.server.ip}) prop1 = blah prop2 = ${db.server.ip} 3. declare properties and it's value in a profile.(maven 의 설정파일인 pom.xml 에 아래와 같이 properties 파일에 대한 변수와 값을 설정한다.).. 더보기
ExceptionUtils - java 에서 exception 관련 처리를 쉽게 도와주는 클래스 Exception 관련 처리를 임의로 가공하여 처리하고 싶을때 편의를 제공해 주는 apache commons-lang package 에 있는 library 이다. http://commons.apache.org/proper/commons-lang/ 사용예: String message = null; try { String str = null str.toUpperCase(); } catch (Exception e) { message = ExceptionUtils.getFullStackTrace(e); } System.out.println(message); 이보다 다양한 기능을 제공하고 있으니 documentation 을 참고하자. javadoc api: http://commons.apache.org/prope.. 더보기
Java 프로그램에서 garbage collection 이 얼마나 일어나는 지 알아 내기 Java 프로그램이 커지면 커질 수록 garbage collection 은 큰 관심의 대상이 된다. 자신이 작성한, 혹은 작성된 어떤 프로그램의 garbage collection 이 어떻게 되는 지 알고 싶다면,JVM 옵션으로 아래 값을 설정해 주면 프로그램이 실행 되는 도중에 JVM 이 garbage collection 의 현황을 보고 한다. org.apache.tools.ant $ java -verbose:gc 더보기
Java 에서 자원 할당하고 해제하기 (괜찮은 패턴) Java 에서 자원을 할당하고 해제하는 코드는 상당히 귀찮고 코드도 복잡하게 될 수 있다. 보통 아래와 같이 코드를 작성한다. public void test(String inputFileName, String outputFileName) { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(inputFileName); out = new FileOutputStream(outputFileName); copy(in, out); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); } ca.. 더보기
Sorted Array to Binary Search Tree - 정렬된 배열을 이진 탐색 트리로 변환 정렬된 배열을 이진 탐색 트리로 변환하는 알고리즘이 있다. 아래와 같이 구성되어 있는데, Recursive 하게 작성되어 있다. Code는 Java 언어로 작성 되어있다. BinaryTree* sortedArrayToBST(int arr[], int start, int end) { if (start > end) return NULL; // same as (start+end)/2, avoids overflow. int mid = start + (end - start) / 2; BinaryTree *node = new BinaryTree(arr[mid]); node->left = sortedArrayToBST(arr, start, mid-1); node->right = sortedArrayToBST(arr,.. 더보기
Marshalling vs Serialization (마샬링 과 시리얼라이즈 의 차이) Marshalling 과 Serialization 의 차이에 대해서 알아 보고자 한다. 간혹 이 두가지 용어가 혼용되는 경우가 많은데, 분명히 차이가 존재한다. 정확하게 알고 넘어가자. :) 1. Marshalling 의미 객체의 메모리 구조를 저장이나 전송을 위해서 적당한 자료형태로 변형하는 것을 의미한다.Marshalling 은 보통 서로 다른 컴퓨터 혹은 서로 다른 프로그램 간에 데이터가 이동되어야 할 경우 사용된다.시리얼라이즈와 비슷한 경우는 객체가 원격의 다른 객체와 통신할 때 serialize 된 객체를 사용할 경우이다.Marshalling 을 수행함으로써 복잡한 통신, 사용자 정의/복잡한 구조의 객체들을 사용하는대신, 단순한 primitive 들을 사용할 수 있다. Marshalling 의 .. 더보기
import 문 기술 순서 규칙 import 문이 많아질 경우, 이를 유지보수하기 위해서 아래와 같은 규칙이 존재한다. 1. import 문은 패키지 이름을 기술해야 한다.2. import 문은 가장 기본적인 패키지명 순서로 정렬이 되어야 한다.3. import 문은 서로 관련이 있는 패키지들은 그룹화 되어야 하고 이 들간에 공백 라인이 존재해야 한다. 출처:http://geosoft.no/development/javastyle.html#Package%20and%20Import%20Statements import 문의 순서를 설명하는 예제 import java.util.HashMap; import java.util.Math; import javax.servlet.http.Cookie; import org.apache.common.cli.. 더보기
Safe double checked locking Java 프로그래밍으로 multi-threaded 애플리케이션을 만들 때, double checked locking idiom 을 이용하여 코드를 작성할 때, 아래와 같은 코드는 정확히 작동하지 않는다.// Single threaded version class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) helper = new Helper(); return helper; } // other functions and members... } Multi-threaded 애플리케이션에서 안전하게 코드를 작성하는 방법1. Java 1.5 이상에서는 아래와 같이 코드를 작성하면 위의 코드가 정확히 작동한다.//.. 더보기
Java byte code 에 관하여 이 포스팅의 일부는 IBM Developerworks의 Java bytecode 기사의 일부를 발췌하여 작성하였다. Java compiler는 Java source code를 Java byte code로 해석을 한다.Java byte code는 C/C++ 프로그램의 중간 표현식이라고 할 수 있는 assembler 에 해당한다.유능한 C/C++ 프로그래머는 Debugging과 성능, 메모리 사용을 tuning하기 위해서 assembler instruction 정보를 사용한다. 이는 Java Programmer가 Java bytecode의 instruction의 의미를 이해하는 것과 같은 맥락이다.그러므로, 좀더 고급 Java 프로그래머가 되기 위해서는 Java byte code에 대한 이해가 필요한다. J.. 더보기
Apache Ant 로 Runnable JAR 파일 만들기 Java 언어로 작성된 프로그램이 들어있는 프로젝트를 빌드하기 위해서 Apache Ant 를 많이 사용한다. Eclipse 를 사용하여, 빌드, JAR 내보내기 등등 여러가지 작업들을 편리하게 할 수 있지만, 빌드 자동화 툴, 예를 들어서, Hudson 등을 사용할 경우 Eclipse 를 사용하기에 불편함이 존재한다. 이럴 경우에는 command line 으로 빌드, 패키징을 하기 위해서는 Ant 를 사용하면 간단하게 해결할 수 있다. Ant 를 사용하여 Runnable JAR 파일을 생성하기 위해서는 Ant 의 빌드 스크립트인 build.xml 을 수정하여야 한다. Runnable JAR 파일을 만들기 위해서는 manifest 라는 것을 사용하여야 하는데, 이것은 JAR file 안에 있는 패키징 된 .. 더보기