Devlopment/Java

    JNI(Java Native Interface) - 객체

    JNI(Java Native Interface) - 객체

    [1]에서 보고 해보았다. 이전에 쓴 JNI와 같은 방식으로 컴파일하고 실행해보면 됀다. 1. Java Source public class JniFuncMain { private static int staticIntField = 300; static {System.loadLibrary("jnifunc");} public static native JniTest createJniObject(); public static void main(String[] args) { System.out.println("[Java] createJniObject() 네이티브 메소드 호출"); JniTest jniObj = createJniObject(); jniObj.callTest(); } } class JniTest { p..

    두 개의 스택을 이용한 큐 구현

    한번 나에게 그런 문제가 주어진 적이 있었다. 스택(Stack)을 이용하여 큐(Queue)를 구현하라. 힌트는 두 개의 스택을 이용하라. 그런데 도무지 그날따라 머리속에 로직이 떠오르지가 않는 것이었다. 로직, 알고리즘이 떠오르지 않는 날은 최선책이 잘 떠오르지 않을 때가 있다. 그래서 나는 내가 문제를 푸는 과정이 조금 미숙할 때가 있지 않은가 싶다. 체계적으로 문제의 해법에 대해 접근해가야 하는데 그렇지 못한 점이 있는 것이다. 오늘 문득 그 문제를 생각하다보니 참 간단하다. * 두 개의 스택을 이용한 구현 중요한 점은 쌓아진 스택을 그대로 빼서 다시 스택에 쌓으면 큐의 형태로 빼낼 수 있게 됀다. 즉, 첫 번째 스택은 push()만을 담당하고, 두 번째 스택은 pop()만을 담당한다. - 첫 번째 ..

    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) 안드로이드 애플리케이션에서 사용할 네..

    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

    자바 개발시 오버라이드 @Override를 꼭 사용하자

    한 개발 까페 게시판에서 @Override를 꼭 사용하자라는 글을 보았다. @Override는 자바 1.5부터 생긴 어노테이션인데, 문자 그대로 메소드를 오버라이드를 한다는 것을 명시하는 것이다. 사용하지 않아도 개발에는 아무런 문제도 없지만 이것의 장점은 개발자의 실수를 체크해줄 수 있다는 것이다. 안드로이드에서 개발자가 ListActivity클래스를 상속받아서 onOptionsItemSelected라는 메소드를 오버라이드 한다고 할 때, 실수로 철자를 틀려서 onOptionsItemSelectef라고 썼다고 하자. 개발자는 onOptionsItemSelected를 오버라이드 한 것이 아닌, onOptionsItemSelectef라는 메소드를 새로 정의한 것이지만 모르고 넘어갈 수 있다. 하지만 @Ov..

    이클립스의 자바 메모리 설정

    출근 후 어느날과 같이 이클립스를 킨 어느 날 이클립스가 "Building workspace: (0%)"라는 문구만을 보이며 끊임없이 "응답없음"을 내뿜었다. 해결방법을 찾던 중에 OKJSP에서는 다음과 같은 해결방법을 찾았다. 1. Build Automatically 옵션을 끄고, 필요할 때만 프로젝트 별로 빌드(project clean)해서 사용 2) 각 eclipse project의 .project 파일 내에 JavaBuilder 설정 이외에 다른 설정이 있다면 그 순서를 잘 조절 2)의 해결안은 .project를 보다가 포기하고 1)의 해결안은 이클립스의 메뉴에서 [Window] -> [Proferences] +Gerneal -> +Workspace에 보면 "Build automatically"의..

    자바 웹 스타트

    자바 웹 스타트 자바 웹 스타르를 사용하면 그 애플리케이션은 처음에는 웹 브라우저에서 실행되지만 그 이후로는 부라우저에 얽매이지 않고 독립형 애플리케이션처럼 실행됩니다. 자바 웹 스타트의 작동원리 1. 클라이언트에서 JWS애플리케이션(.jnlp파일)에 대한 웹 페이지 링크를 클릭 2. 웹 서버(HTTP)에서 그 요청을 받은 다음 .jnlp파일을 돌려보냅니다. 3. 브라우저에 의한 자바 웹 스타트가 시작. JWS보조 애플리케이션에서는 .jnlp파일을 읽은 다음 서버에 MyApp.jar파일 요구 4. 웹 서버에서 요청받은 .jar파일을 제공. 5. 자바 웹 스타트에서 JAR를 받아서 지정된 main()메소드를 호출하여 애플리케이션을 시작. .jnlp 자바 웹 스타트 애플리케이션을 만들 때는 그 애플리케이션에..