JDK, SDK, NDK

Hudson Park
5 min readSep 6, 2019

--

각각의 차이점에 대해

JDK(Java Development Kit, 자바 개발 도구)

  1. 정의

자바 애플리케이션을 구축하기 위한 핵심 플랫폼의 구성요소(?? 무슨 말인가)

2. 자바 프로그래밍의 3대 핵심 기술 패키지

2–1. JVM(Java Virtual Machine, 자바 가상머신)

2–2. JRE(Java Runtime Environment, 자바 런타임 환경)

JVM을 생성하는 디스크 상의 부분

자바 프로그램을 구동하기 위한 독립 구성요소임과 동시에 JDK의 일부

2–3. JDK

위의 정의가 어렵기 때문에 쉽게 말하면, 자바 기반 소프트웨어를 개발하기 위한 도구들로 이뤄진 패키지라고 할 수 있다.

  • 패키지 종류

Java SE (Standard Edition)

Java EE(Enterprise Edition) : Java SE + Java Beans, ORM(Object Relational Mapping) 등을 지원

Java ME(Miro Edition) : Java SE + 휴대전화, PDA, 셋탑박스 등을 지원하는 기능

위 세 패키지 간의 관계를 보여주는 이미지는 다음 아래와 같다.

SDK(Software Developer’s Kit, 소프트웨어 개발 도구)

  1. 정의

UI 기반으로 특화된 API를 제공하여 Application Level에서 개발이 가능하게 도와주는 패키지

2. 활용

Java 기반으로 Application Emulator를 내장하고 있어 Build 동시에 Test가 가능하다. 그렇기 때문에 UI 기반의 안드로이드 애플리케이션을 개발할 때 활용됨

NDK(Native Development Kit, 네이티브 개발 도구)

  1. 정의

C/C++을 이용하여 애플리케이션, 미들웨어 개발에 사용되는 Framework

2. 왜 나왔는가?

  • SDK를 토대로 만든 안드로이드 애플리케이션은 자바를 활용했기 때문에 자바의 한계점을 그대로 가지고 있다.
  • 그렇기 때문에 그래픽 처리나 시그널 프로세싱(센서 값 처리) 등 CPU의 처리 속도가 중요한 부분에서 SDK의 한계점이 드러남
  • 이런 처리를 위해 구글에서 안드로이드 애플리케이션에서도 C/C++을 활용할 수 있도록 제공하는 도구가 바로 NDK이다.

3. JNI(Java Native Interface)

JVM 위에서 실행되고 있는 자바코드가 네이티브 응용 프로그램(하드웨어와 운영체제 플랫폼에 종속된 프로그램들) 그리고 C, C++ 등 다른 언어들로 작성된 라이브러리들을 호출하거나 반대로 호출되는 것을 가능하게 하는 Framework

3–1. JNI의 원리

  • Java 파일 : 호출하려고 하는 C 함수에 대한 선언문과 호출문, 그리고 dll 로드문을 작성
  • C/C++ : 파일Native Call 하려는 C 함수에 대한 정의문 및 헤더 파일을 작성
  • 만들어진 C 파일을 dll로 빌드
  • 빌드한 dll을 자바코드에서 호출해서 만든 C함수를 자바에서 사용할 수 있게 함

3–2. 활용

C/C++로 제어가 가능했던 하드웨어 단위의 기능(센서 값 처리, 터치) 등을 JNI를 활용하여 개발할 수 있게 함으로써 다음과 같은 처리가 가능해진다.

  • 영상처리
  • 게임
  • 센서처리
  • 물리 시뮬레이션

Reference

--

--

Hudson Park

stay hungry, stay foolish / cool head and warm heart