Devlopment

    JNI(Java Native Interface)

    JNI(Java Native Interface)

    프로젝트를 진행하면서 JNI에 대해 알게 되었었다. Java에서 C함수를 호출하거나 C에서 Java의 메소드를 호출할 때 사용하는 것인데, 안드로이드 공부를 하다가 조금 더 파고들게 되었다. * 안드로이드는 자바로 프로그래밍을 하는데 왜 JNI에 대해 알아야 할까? 우선 안드로이드 플랫폼은 순수하게 Java로만 구성되어진 것이 아닌 Java 레이어와 C/C++레이어가 서로 상호 작용하면서 동작한다. 이 두 레이어가 유기적으로 동작하게 만들려면 JNI에 대해 알아야 한다. 그리고 일반적으로 Java는 C/C++에 비해 느리다. 성능이 중요할 경우 C/C++로 작성하고 이를 JNI를 통해 Java에서 호출할 수 있다. * NDK(Native Development Kit) 안드로이드 애플리케이션에서 사용할 네..

    C와 Java의 컴파일 과정

    C와 Java의 컴파일 과정

    C와 Java의 컴파일 과정에 대해서 찾아보는 중에 좋은 책을 찾았다. 국내 웹에는 C의 컴파일 과정에 대한 내용밖에 없었다. Reverse Engineering Software[1]라는 책인데 2장에 컴파일 과정에 대한 내용이 나와 있었다. 1. C Compile 아래는 C의 컴파일 과정이다. Figure 1. 컴파일 과정(출처 : [1]) 1.1 Preprocessor C는 다른 언어의 컴파일러와 다르게 전처리 과정이 들어간다. 전처리([3] 참조)는 컴파일에 앞서 필요한 처리를 해주는 것이다. 전처리문에는 다음과 같은 것들이 있다. Table 1. 전처리문의 종류 전처리문 기능 #include 디스크상의 파일을 편입 #define 매크로를 정의 #undef 정의되어 있는 매크로를 취소 #if~#dn..

    테스트 주도 개발(Test Driven Development) 1

    테스트 주도 개발(Test Driven Development) 1

    근래 TDD에 관심을 갖게 되었다. 꾀 효율적인 개발 기법인데 안타까운 점은 이러한 것을 쓰는 회사나 팀이 많지 않을것 같아서, 개인적으로 공부하지 않는한 배울 기회가 별로 없을 것 같다. 나는 단위테스트에 대해 공부하다가 알게 되었는데 꾀 좋다. 단순한 테스트 기법이 아닌 좋은 분석기법이자 설계기법이다. 기존에 프로그래머는 개발을 먼저 하고 그것을 테스트하는 코드를 만들게 됀다. 회사에서 역시 잘 돌아가나 확인하고 잘 돼네?라고 끝나기도 한다. 지금 생각해보면 정말 체계적이지 못한 방법이다. 나도 아직 이 테스트주도개발이 익숙하지 않지만 숙달시켜보려고 한다. 안타까운 점은 체계적이고 정도를 지키는 회사의 부서가 아니라면 이 방식을 계속 쓰기가 힘들것 같다. ※ 테스트 주도 개발(Test Driven D..

    단위테스트. JUnit

    단위테스트. JUnit

    오랜만에 포스팅이다. 자바 웹 관련 개발자들과 애기하다보면 JUnit에 대한 이야기가 늘 나온다. 사실 난 그동안 테스는 main()을 통해서만 테스트만 해왔었다. 업무적으로 JUnit을 써볼 기회가 많지도 않긴 했지만 전문가와 단위테스트에 대한 이야기가 나왔는데 내가 추상적으로 이야기했더니 무시를 당했다. 내가 화술이 부족해서(모르는 것도 아는 것처럼, 아는 것은 더 부풀려서 하는) 그럴수도 있지만, 사실 알고만 있을뿐 내가 개발에 직접 사용해보지 않았으니까 그러려니 했다. 그리고 오늘 웹에서 자료를 찾아가며 사용해보았는데, 이것은 신세계였다. 그동안 난 일부 기능들에 대한 테스트를 각 main()을 통해 하였는데 사실 지저분하고 매우 번거로운 작업이다. 각 테스트를 위한 코드를 작성했다가 주석처리를 ..

    System.out.println의 재정의

    System.out.println의 재정의 다른 블로그에서 참조하였다. 지금 출처를 잊음. import java.io.IOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; import java.io.PrintStream; import javax.swing.JTextArea; import javax.swing.text.BadLocationException; public class SoutInterceptor { private PipedInputStream pipedInputStream; private PrintStream originalPrint; public SoutInterceptor() { originalPrin..

    [Linux, Window] JAVA로 로컬 IP 주소 얻어오는 방법

    이번 개발에 있어서 윈도우 이클립스에서 개발한 서버가 리눅스 환경에서 일부 기능에 문제가 있어서 찾다보니 같은 메소드지만 윈도우 환경에서 로컬 ip주소를 얻어오는 코드가 리눅스에서는 "127.0.0.1"을 가져와서 문제가 되었다. 구글에서 검색한 결과 코드가 좀 길고 지저분하지만 아래 코드를 써줘야 했다. * Windows try { System.out.println(InetAddress.getLocalHost().getHostAddress()); } catch (UnknownHostException e) { e.printStackTrace(); } * Linux try { String ip = null; boolean isLoopBack = true; Enumeration en; en = Network..

    자바 enum에서 내부 String

    public enum Status { REGISTER("1"), UNREGISTER("0"), DEFECT("2"); private final String value; Status(String value){ this.value = value; } @Override public String toString(){ return value; } }

    자바 Exception의 printStackTrace 구현.

    개발중에 디버그 용도로 개발한 Exception의 printStackTrace(). * 현재 실행 위치에서 쌓인 스택을 출력한다. void printStackTrace(){ StackTraceElement[] stack = Thread.currentThread().getStackTrace(); for(int i=1; i

    [VC++] HEAP CORRUPTION DETECTED 에러 해결

    힙 메모리를 침범해서 나는 것이었는데 메모리를 해제할 때 자꾸 발생했다. 문제점을 찾다보니 선언부에 문제가 있었다. char*를 malloc 할 때 실제 사용하는 부분에다가 공백문자를 +1을 해주어야 하는데 깜빡했다가 나는 문제였다.

    failed to load the jni shared library jvm.dll

    뭔가 했더니 이클립스는 64비트용인데 자바는 32비트를 깔아놓아서 생긴 문제였다. 자바 삭제하고 재설치하니 깔끔함.