본문 바로가기

시즌1/Java Tips

[Java Tips] File.mkdir()과 File.mkdirs()의 차이점 Java API에서는 디렉토리를 생성하기 위해, File.mkdir()과 File.mkdirs(), 두 개의 API가 제공됩니다. 위 두 개의 API는 모두 디렉토리를 생성하는 기능을 하지만, 세부적으로는 약간 틀린 기능을 합니다. File.mkdir() 만들고자 하는 디렉토리의 상위 디렉토리가 존재하지 않을 경우, 생성 불가 C:\base\want want 디렉토리를 만들고자 하는데, base 디렉토리가 없는 경우, 생성 불가 File.mkdirs() 만들고자 하는 디렉토리의 상위 디렉토리가 존재하지 않을 경우, 상위 디렉토리까지 생성 C:\base\want want 디렉토리를 만들고자 하는데, base 디렉토리가 없는 경우, base 디렉토리까지 생성 package javatips; import ja.. 더보기
[Java Tips] LineNumberReader를 이용해 손쉽게 Line Number 추출하기 이 팁은 LineNumberReader를 이용하여, Text 파일의 Line Number를 추출하는 법을 소개합니다. FileReader를 이용하여, File을 오픈하고, BufferedReader, LineNumberReader를 Chaining하여, LineNumberReader.getLineNumber() method를 이용하여, 텍스트 파일의 라인 넘버를 손쉽게 추출할 수 있습니다. package javatips; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; public class LineNumberReaderDemo { publi.. 더보기
[Java Tips] Logger 설정을 Properties File로 처리하는 법 이 팁은 java.util.logging.Logger으 Default 값들을 Properties File로 설정하는 법을 설명합니다. 다음 내용을 Properties 파일에 저장하신 후, # 루트 로거에 대한 랜들러 설정 handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler # Default 로깅 레벨 설정 .level = ALL # ConsoleHandler 에 대한 로깅 레벨 설정 java.util.logging.ConsoleHandler.level = INFO # FileHandler 에 대한 로깅 레벨 설정 java.util.logging.FileHandler.level = ALL # ConsoleHandler 에 대.. 더보기
[Java Tips] DatagramSocket을 이용한 간단한 UDP 서버/클라이언트 구현 자바에서는 UDP 통신을 위해서 DatagramSocket과 DatagramPacket을 제공합니다. 이번 팁에서는 DatagramSocket과 DatagramPacket을 이용하여 간단한 UDP 서버/클라이턴트를 구현해 보겠습니다. UDP 통신을 위해서는 UDP 패킷을 받을 서버 Socket이 생성되어야 합니다. Socket 생성 시는 다음과 같은 순서로 수행합니다. 1. DatagramSocket 생성 : 생성 시, Listen할 Port 지정 2. DatagramPacket 생성 : 데이터를 수신할 그릇이 되는 DatagramPacket 생성 3. DatagramSocket.receive() 호출 : 생성된 Socket의 receive method를 생성된 packet object를 파라미터로 하여.. 더보기
[Java Tips] Localhost의 IP, Hostname을 알아내는 법 이번 팁은 Localhost의 IP, Hostname을 알아 내는 법입니다. Localhost의 IP, Hostname은 InetAddress.getLocalHost() method를 이용하여 손쉽게 얻어올 수 있습니다. import java.net.InetAddress; import java.net.UnknownHostException; public class LocalHostIpTest { public static void main(String args[]){ try { InetAddress addr = InetAddress.getLocalHost(); // Get IP Address byte[] ipAddr = addr.getAddress(); // Get hostname String hostnam.. 더보기
[Java Tips] 도메인(Domain)을 IP로 변환하는 법 다음 팁은 도메인(Domain)을 IP로 변환하는 팁입니다. 서버에 접속해야 하는 클라이언트가 서버 IP를 알아야 하는 경우에 사용하실 수 있습니다. import java.net.InetAddress; import java.net.UnknownHostException; public class DomainToIp { public static void main(String args[]){ try { InetAddress addr = InetAddress.getByName("froginpot.tistory.com"); byte[] ipAddr = addr.getAddress(); // IP 형식으로 변환 String ipAddrStr = ""; for (int i=0; i 0) { ipAddrStr += "... 더보기
[Java Tips] 날짜 비교하는 법 이 팁은 Java에서 날짜 형식을 비교하는 방법을 보여 줍니다. 날짜 형식은 주로 Calendar나 Date를 이용하는데, 두 class모두, before, after, equals method를 이용하여 비교를 할 수 있습니다. import java.util.*; import java.util.*; import java.text.*; public class TestDate { public static void main(String args[]) { TestDate a = new TestDate(); } TestDate() { String DATE_FORMAT = "yyyy-MM-dd"; java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(D.. 더보기
[Java Tips] 현재 작업 디렉토리 얻어오기 가끔 현재 작업 디렉토리를 알아야 하는 경우가 있습니다. 이럴 경우, System Property를 이용하여 얻어올 수 있습니다. String curDir = System.getProperty("user.dir"); user.dir property는 Java VM이 실행된 디렉토리를 리턴합니다. 예를 들어, D:\Project\Test 디렉토리에서 java 명령으로 수행된 경우, D:/Project/Test 가 리턴되게 됩니다. 더보기
[Java Tips] array 를 다른 array로 복사하는 법 얼마전 다른 개발자가 작성한 코드를 보다가 array 복사를 for loop 문을 이용해서 하는 것을 보았습니다. 물론, 별 생각 없이 써도 무방한 코드입니다. int[] src = {1, 2, 3, 4, 5}; int[] dest = new int[src.length]; for(int i = 0 ; i < src.length ; i++){ dest[i] = src[i]; } 하지만, 복사해야 하는 array의 사이즈가 1000, 10000으로 커진다면 어떻게 될까요? 과연 성능이 잘 나올까요? 이런 경우, 사용할 수 있는 간단한 API가 java.lang.System.arraycopy(Object src, int src_position, Object dst, int dst_position, int le.. 더보기
[Java Tips] ArrayList를 array로 변환하는 방법 ArrayList를 쓰다 보면 가끔 array로 변환해야 하는 경우가 발생합니다. 여러 가지 방법이 있겠지만, 다음과 같이, 두 가지 방법을 주로 쓰게 됩니다. array를 생성한 다음, for 문을 통해 assign 하는 방법 ArrayList.toArray() 또는 ArrayList.toArray(T[] a)를 이용하는 방법 1번 보다는 2번 방법이 성능 면이나 코드 가독성 면에서 추천합니다. 샘플 1 : ArrayList.toArray()를 이용하는 법 import java.util.ArrayList; public class ArrayListToArray { public static void main(String[] args) { // Array List 생성 ArrayList al = new Ar.. 더보기
[Java Tips] 자바 프로그램 메모리 사용량 보기 자바로 개발하다 보면, 헌재 전체 메모리 양과 사용 가능한 메모리 양을 확인해야 할 때가 있습니다. 메모리와 관련된 기능은 Runtime class에서 제공해 주며 다음과 같이 사용할 수 있습니다. 각 Method 들은 byte 단위의 메모리 양을 리턴합니다. totalMemory : 현재 Allocate 된 메모리 사용량을 리턴 freeMemory : 현재 Allocate 된 메모리 중, 사용 가능한 메모리 양을 리턴 public class MemoryTrace { public static void main(String[] args) { System.out.println("Total Memory : " + Runtime.getRuntime().totalMemory()); System.out.printl.. 더보기
[Java Tips] NullPointerException을 피하는 String 비교 구문 개발을 하다 보면 상수형 String과 변수형 String을 비교해야 하는 일이 자주 있습니다. 이런 경우, 다음과 같이 사용하는 경우는 변수형 String이 Null인 경우, NullPointerException이 발생합니다. 예 : if(variable.equals(CONSTANT_STRING)) doSomething(); NullPointerException을 발생시키지 않기 위해, variable에 대해 null 체크를 해 줘야 합니다. 예 : if(variable != null && variable.equals(CONSTANT_STRING)) doSomething(); 하지만, 다음과 같이 쓰면, null 체크 없이도, 비교 구문을 작성하실 수 있습니다. 예 : if(CONSTANT_STRING.. 더보기
Java! 이해하고 개발하자. ① final 에 대한 이해 거의 모든 프로그래밍 언어는 영어권에서 정의가 되었습니다. 자바도 마찬가지로 썬 마이크로시스템즈의 제임스 고슬링의 주도하에 정의가 된 언어입니다. 그렇기 때문에 당연하게도 언어 자체가 영어로 정의 되어 있습니다. 어렸을 적(국민학교 4학년 쯤으로 기억을 합니다.), 그 당시 컴퓨터 학원에서는 애플 컴퓨터로 베이직을 가르치곤 했습니다. 당시는 영어 교육에 대한 바람도 불지 않았고, 대다수의 국민학생이 영어라곤 알파벳만 읽을 수 있는 수준이었습니다. 당연하게도 영어로 정의된 베이직을 외워서 썼습니다. 대표적으로 GOTO 문장.....읽을 때도 "고투"로 읽지 않고 "지오티오"라고 읽었었습니다. "지오티오"를 쓰면 어디로 가더라를 디립다 외웠습니다. 참 아련한 추억입니다. 나이가 들어, 영어를 어느 정도 하는.. 더보기
[Java Tips] Java Primitive Type을 Hex String으로 변환하는 Utility 정수형 데이터를 Hex String으로 변환 하거나, 그 역변환 하는 방법은 여러가지가 있습니다. Integer.toString(int i, int radix)와 같이 기본 Java API에서 제공되는 부분도 있습니다. 이를 사용해도 되지만, char나 byte 같은 경우는 Type Casting을 통해서 해야 하는 번거로움이 있습니다. 그래서, 다음과 같은 Utility Class를 만들어서 쓰고 있습니다. package utils; /** * 정수형 타입을 Hex String으로 변환하고, Hex String을 정수형 타입을 변환하는 Utility */ public class HexUtils { private static final char hexchar[] = { '0', '1', '2', '3',.. 더보기
소프트웨어 테스팅 : 자바 코드 커버리지 툴(Java Code Coverage Tool) 자바 코드 커버리지 툴(Java Code Coverage Tool) Code Coverage 분석을 위한 Tool들은 오픈 소스부터 시작해, 상용 솔루션까지 많은 Tool 들이 있습니다. 다음은, 무료 배포되고 있는 Java Code Coverage Tool을 비교 분석한 매트릭스입니다. 다음 표와 같이 각 Tool 마다, 제공되는 기능이 다양합니다. 저의 경우는 MC/DC Coverage 분석이 필요하기 때문에, 대부분 CodeCover를 사용합니다만, 간단하에 사용할 때에는 EMMA를 사용하기도 합니다. 분석 영역이 적은 만큼 빠르기 때문이죠. CodeCover로 MC/DC Coverage 까지 분석하는 경우, 클래스 갯수가 500 가 넘어가면, 한 번 분석하는데 굉장히 오래 걸립니다. 필요에 따라,.. 더보기
소프트웨어 테스팅 : Code Coverage 분석 Tool - CodeCover 리뷰 CodeCover 리뷰 CodeCover는 Java Code Coverage 분석 Tool 중의 하나로써, 무료로 배포되는 Tool 중에서는 그 기능이 최고라고 말할 수 있을 정도로 막강한 기능을 제공하는 Tool 입니다. 본 블로그에 등록된 Code Coverage 관련 글들의 예제들고 이 CodeCover를 이용하여 테스트되었습니다. Feature 1. Eclipse 기반 : 물론, 커맨드 라인 기반의 Standalone 패키지도 제공이 되지만, 막강한 기능중 하나는 Eclipse plug-In으로 설치되어 간단하게 사용할 수 있는 부분입니다. 2. 지원하는 Code Coverage Criteria : CodeCover는 Statement Coverage, Decision(Branch) Coverag.. 더보기
소프트웨어 테스팅 : Code Coverage - Decision Coverage Code Coverage - Decision Coverage Decision Coverage는 Code Coverage 분석의 7가지 척도 중 하나로써, 각 조건문이 True 혹은 False가 되는 조건이 모두 테스트되는 정도를 측정하는 척도입니다. 참조 : Code Coverage, Statement Coverage 예를 들어 다음과 같은 코드가 있을 경우, package codecoverage; public class DecisionCoverageTest { public int method(int param){ if(param > 0){ System.out.println("param is greater than 0"); } else{ System.out.println("param is equal or.. 더보기
소프트웨어 테스팅 : Code Coverage - Statement Coverage Statement Coverage Statement Coverage는 Code Coverage 분석의 7 가지 분석 척도 중 하나로써, 각 Statement 가 테스트되는 수준을 정의하는 척도입니다. 이 Statement Coverage 분석을 통해, 개발된 소프트웨어가 어느 정도 테스트가 수행되었는지를 파악할 수 있습니다. 참조 : Code Coverage 예를 들어 다음과 같은 소스 코드가 있을 경우, package codecoverage; public class StatementCoverageTest { public void method1(int param){ for(int i = 0 ; i < param ; i++){ System.out.println(i); } } } 이 소스 코드를 테스트 하기.. 더보기
코드 커버리지(Code Coverage) Code Coverage 코드 커버리지(Code Coverage)는 소프트웨어 테스트 시 사용되는 측정 기준 중에 하나이며, 이는 소스 코드가 테스트된 정도를 나타냅니다. 당연히, 소스 코드 내부를 들여다 봐야 하므로, 화이트박스 테스트(White box testing)에 속합니다. 코드 커버리지 기준은 다음과 같이 7개 기준이 있으며(아래 5개의 기준과 제일 밑에 2개의 기준), 특정 테스트 케이스(Test Case)를 어느 기준을 적용하여 테스트하느냐에 따라 커버리지 비율이 틀려지게 됩니다. Function coverage - 소프트웨어 내에 정의된 Function이 호출되는 정도 Statement coverage - 소프트웨어 내에 기술된 Statement가 수행되는 정도 Decision cover.. 더보기