객체지향 언어라는 공통점을 가지고 있는 씨뿔뿔과 자바의 공통점을 찾기는 어렵지 않습니다. C와 JAVA의 공통점을 하나하나 짚어보면서 다른 프로그래밍 언어의 공통점을 알고 소통하는 프로그래밍을 해 보도록 합시다.
Null Pointer Exception
이는 다름과 같이 Null Pointer Exception을 일으킵니다.
JAVA의 창시자인 James Gosling 의 저서 [The Java Language Specification] Chapter 3. Lexical Structure에 전 세계 언어를 지원하는 UTF-16 이야기가 나옵니다. 이에 한글로 클래스 명을 작성하였습니다. 변수, 메서드 역시 한글 사용이 가능합니다.
public static void main(String [] args) {
System.out.println(s.getClass());
이 프로그램을 실행시킨 결과는 다음과 같습니다.
Exception in thread "main" java.lang.NullPointerException
at javatest.널포인터익셉션.main(널포인터익셉션.java:6)
java.lang.NullPointerException 이라고 되어 있습니다. 포인터가 없는 언어인데 왜 Null Pointer라는 표현을 쓸까요?
자바 언어의 소스 코드 중 JavaExceptions.c 파일을 보면
createThrowableFromJVMTIErrorCode(JNIEnv * jnienv, jvmtiError errorCode) {
const char * throwableClassName = NULL;
const char * message = NULL;
jstring messageString = NULL;
case JVMTI_ERROR_NULL_POINTER:
throwableClassName = "java/lang/NullPointerException";
errorCode가 JVMTI_ERROR_NULL_POINTER 일 때 NullPointerException 메시지를 출력합니다.
C에서 NULL은 0입니다. JAVA에서는 무엇일까요?
NULL_CHECK(e, JVMTI_ERROR_NULL_POINTER);
NULL_CHECK를 0인지 아닌지로 판별하고 있습니다. 역시 0입니다.
#define NULL_CHECK0(e) if ((e) == 0) return 0
#define NULL_CHECK(e) if ((e) == 0) return
언어적 철학으로는 NULL(C11), null(JAVA), nil(Objective-C), nullptr(Visual C/C++) 등 다양하게 표현하고 있지만 실상은 모두 0입니다. 개념 분리를 위해 각 언어들이 노력하지만 단순히 ‘없다’는 표현이 맞고, 0과 1의 컴퓨터 세계에서는 0으로 이해하는 것이 다양한 프로그래밍 언어를 이해하는 첫걸음입니다.
최근댓글