본문 바로가기

Programming/Java

멀티코어 시스템의 Java 동시성 버그 패턴 아래 글은 IBM developerworks 에 게재된 유용한 Java 관련 Concurrency 관련 이슈에 대한 대표적인 유형과 이를 해결하기 위한 방법들을 소개해 놓았다. 멀티코어 시스템의 Java 동시성 버그 패턴 http://www.ibm.com/developerworks/kr/library/j-concurrencybugpatterns/index.html 더보기
equals method 를 overriding 할 때 주의 점 우리는 클래스를 디자인 할 때, equals method 를 override 하게 되는 경우가 많다. override 하게 될 경우, 중요한 사항들이 있으니 4가지 정도가 있다. 첫 번째부터 세 번째 까지는 수학에서 나오는 용어와 같다고 생각하면 된다. 1. Reflexivity - 어떤 객체는 자신과 동일해야 한다. 즉 A equals A 라고 할 수 있어야 한다. 아주 당연한 이야기 이겠지만, 그렇지 않을 수 있다. 2. Symmetry - 두 객체는 그것들이 동일하다고 판단되어야 한다. 예를 들어서, A equals B 라고 한다면, B equals A 라고 할 수 있어야 한다. 3. Transitivity - 첫 번째 객체가 두 번째 객체와 같고, 두 번째 객체가 세 번째 객체와 같다면, 첫 번째.. 더보기
Creating runnable JAR using Apache ant (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 안에 있는 패키징 된 .. 더보기
The CERT Oracle Secure Coding Standard for Java Java 프로그래밍을 하면서 보안관련 취약 코드를 작성하는 것을 미연에 방지해 주는 코딩 가이드라인이 있다는 사실을 알게 되었다. 이러한 가이드 라인을 제공하는 곳은 미국의 Carnegie Mellon 대학의 소프트웨어 엔지니어링 기관에서 운영하고 있는 http://www.cert.org 이라는 곳이다. 이 기관은 Java 뿐만 아니라 C/C++ 관련 보안관련 이슈도 다루고 있다. 아래의 링크는 자바 의 보안관련 기본적인 Coding guide line 이라고 보면 된다. https://www.securecoding.cert.org/confluence/display/java/The+CERT+Oracle+Secure+Coding+Standard+for+Java 더보기
All of Exception classes in Java 1.6 api Extracting all exception classes from java api is simple. Using linux command grep | cut | etc. AccessControlException AccessException AccountException AccountExpiredException AccountLockedException AccountNotFoundException AclNotFoundException ActivateFailedException ActivationException ActivityCompletedException ActivityRequiredException AlreadyBoundException AlreadyConnectedException Annotati.. 더보기
Simple usage of javadoc (javadoc 로 문서 만들기) Java 프로그래머라면 누구나 알고 있어야 할 사실이 있다. 바로 문서!!! JDK 에서는 문서 생성 프로그램을 제공하며, 프로그램의 이름은 javadoc 이다. 이 프로그램을 이용하면 Java 소스에 작성된 javadoc 를 이용하여 문서를 만들 수 있다. 문서를 만드는 방법은 매우 간단하다. 필요에 따라 여러가지 옵션을 이용할 수 있으나, 너무나도 다양한 옵션들이 존재하기 때문에, 더 자세한 정보를 얻기 원한다면 javadoc help 를 이용하면 되겠다. 내가 작성한 소스의 디렉토리구조가 아래와 같다고 하면, /src/com/Common.java /src/com/*.java 더보기
Java File encoding 설정 Java 프로그램으로 파일을 쓸때, encoding 을 설정하기 위해서는 java.io.OutputStreamWriter 클래스를 사용하여 할 수 있다. 아래의 코드는 encoding을 UTF-8 으로 설정하는 방법이다. try { String path = "c:\temp.txt"; OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8"); out.write("Hello Java program.\n"); out.close(); } catch (IOException e) { e.printlnStackTrace(); } catch (Exception e) { e.printlnStackTrace(); } 이렇게 하게 .. 더보기
Java simple logger using apache log4j (Java Simple Logger 만들기) Logger 를 사용하고 싶을때, 보통 아파치에서 제공하는 log4j 라는 것을 사용하는데, 이것은 몇몇 설정을 해주어야 하기 때문에, 간단하게 자바에서 제공하는 logging 기능을 사용하여 Logger 를 만들 수 있다. 아래의 예제는 간단한 로그 기능만을 구현한 클래스 이므로, encoding 이라든지, 기타 여러가지 설정을 바꾸고 싶을때는, 좀더 customize 해야 한다. // JRE 1.5 이상에서만 실행가능, JDK 1.5 이상에서 컴파일 가능 // Generic Programming을 사용하였음. import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.logging.FileHand.. 더보기
XML parser using Java SAX library (Java SAX 이용하여 XML Parser 만들기) 자바에서 XML 파일을 파싱하는 Parser 를 만들기 위해서, 사용할 수 있는 라이브러리들은 다양하다. 그중에서 유명한 것이, DOM 과 SAX 이다. DOM Parser 는 xml text 의 string들과 stream 들을 parsing 할 때 사용되는 것으로서, XML 을 parsing 하면서, 트리구조를 만들고 이 트리구조 전체를 메모리 상에 로드 시킨다. 장점은: 사용법이 간단하고, 트리구조 전체를 볼 수 있다는 것. 단점은: 메모리를 많이 먹고, 조금 느리다는 점 이 있다. 더 자세한 정보를 얻고 싶으면 아래의 링크로 가서 살펴보면 도움이 된다. http://www.w3schools.com/DOM/dom_intro.asp SAX Parser 는 Simple API for XML Parser.. 더보기
Difference between StringBuilder and StringBuffer (StringBuilder 와 StringBuffer의 차이점) StringBuilder is not synchronized but StringBuffer is. So if you are considering using codes in multi-threaded environment, you should use StringBuffer. If not use StringBuilder. It's much more faster. 1. Use String class if text is not changed. 2. Use StringBuffer if the text is continuously changing and you are planning to program muti-threaded. 3. Use StringBuilder if the text is continuously.. 더보기