본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effecitve Java] 네이티브 메소드를 분별력 있게 사용하자.

by 돼지왕 왕돼지 2017. 2. 14.
반응형

 [Effecitve Java] 네이티브 메소드를 분별력 있게 사용하자.


C, C++, Effective JAVA, glue code, java.awt.systemtry, java.util.prefs, JNI, jvm, legacy code, native method, prefs, [Effecitve Java] 네이티브 메소드를 분별력 있게 사용하자., 결함, 고정 비용, 관리 시스템, 권장, 네이티브 메소드, 네이티브 프로그래밍 언어, 단점, 데스크톱, 동등한 성능, 라이브러리, 레거시 데이터, 레거시 코드, 레지스트리, 메모리 손상 에러, 분별력, 성능 저하, 성능 향상, 실행 시간, 안전, 알아보기 어렵고, 앱 이식성, 언어, 자원, 작성하기 번거로운 접속 코드, 적은 양, 접근, 특정 플랫폼, 파일 락, 플랫폼 종속, 휴지통


-
JNI 는 네이티브 메소드를 호출할 수 있게 해준다.
네이티브 메소드는 C, C++ 과 같은 네이티브 프로그래밍 언어로 작성한 특별한 메소드를 말한다.


-
지금까지 네이티브 메소드의 주용도는 세가지였다.

    레지스트리와 파일 락 같은 특정 플랫폼 관리시스템의 접근을 제공
    레거시 데이터를 제공할 수 있는 레거시 코드로 된 라이브러리의 접근 제공
    성능 향상을 위해 어플리케이션의 일부를 네이티브 언어로 작성하는 데 사용


-
자바가 발전하면 기존의 네이티브 메소드만이 할 수 있었던 일을 많이 대체하였다.

    java.util.prefs 패키지가 레지스트리 기능을 제공.
    java.awt.SystemTray 가 데스크톱 시스템의 휴지통 영역의 접근을 제공


-
성능향상을 이유로 네이티브 메소드를 사용하는 것은 권장할 일이 아니다.
JVM 이 훨씬 빨라져 대부분의 작업에서 네이티브 메소드에 의존하지 않고 동등한 성능을 얻을 수 있다.


-
네이티브 메소드를 사용하면 심각한 단점이 생긴다.
    네이티브 언어가 안전하지 않으므로, 메모리 손상 에러로부터 안전하지 않다.
    네이티브 언어가 플랫폼에 종속되므로, 네이티브 메소드를 사용하는 어플리케이션은 이식성이 떨어진다.
    네이티브 코드를 사용하는 애플리케이션은 결함을 찾기도 훨씬 더 어렵다.
    자바 코드에서 네이티브 코드로 진입할 때와 빠져 나올 때는 고정비용(실행 시간과 자원) 이 든다.
    따라서 적은 양의 일만을 처리할 경우 네이티브 메소드는 오히려 성능을 저하시킬 수 있다.
    마지막으로 네이티브 메소드는 알아보기 어렵고 작성하기 번거로운 접속 코드(glue code)를 필요로 한다.



Summary


네이티브 메소드를 사용하기 전에 다시 한번 생각하자.
저수준의 자원이나 레거시 라이브러리를 사용하기 위해 반드시 네이티브 메소드를 써야 한다면, 가능한 적은 양의 코드로 사용하고 완벽하게 테스트하자.
네이티브 코드에서 생긴 하나의 결함이 시스템 전체를 손상시킬 수 있다.





반응형

댓글