객체지향 언어라는 공통점을 가지고 있는 씨뿔뿔과 자바의 공통점을 찾기는 어렵지 않습니다. C와 JAVA의 공통점을 하나하나 짚어보면서 다른 프로그래밍 언어의 공통점을 알고 소통하는 프로그래밍을 해 보도록 합시다.


Null Pointer Exception


C는 포인터를 가지고 있습니다.


#include <stdio.h>




void main() {


             int *s = NULL;


             *s = 8;   


}





이는 다름과 같이 Null Pointer Exception을 일으킵니다.



JAVA의 창시자인 James Gosling 의 저서 [The Java Language Specification] Chapter 3. Lexical Structure에 전 세계 언어를 지원하는 UTF-16 이야기가 나옵니다. 이에 한글로 클래스 명을 작성하였습니다. 변수, 메서드 역시 한글 사용이 가능합니다.                    

package javatest;



public class 널포인터익셉션 {


           public static void main(String [] args) {


                     Object s = null;


                     System.out.println(s.getClass());


           }


}


이 프로그램을 실행시킨 결과는 다음과 같습니다.


Exception in thread "main"   java.lang.NullPointerException


             at javatest.널포인터익셉션.main(널포인터익셉션.java:6)



java.lang.NullPointerException 이라고 되어 있습니다. 포인터가 없는 언어인데 왜 Null Pointer라는 표현을 쓸까요?


자바 언어의 소스 코드 중 JavaExceptions.c 파일을 보면


jthrowable


createThrowableFromJVMTIErrorCode(JNIEnv * jnienv, jvmtiError   errorCode) {


    const char *   throwableClassName = NULL;


    const char *   message            = NULL;


    jstring   messageString           = NULL;




    switch ( errorCode ) {


        case   JVMTI_ERROR_NULL_POINTER:


                  throwableClassName = "java/lang/NullPointerException";


                break;





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으로 이해하는 것이 다양한 프로그래밍 언어를 이해하는 첫걸음입니다.


'Objective-C, SQLite3' 카테고리의 다른 글

인터넷 안되는 곳에서 강의 준비  (0) 2019.02.05
필카와 디카 차이  (0) 2019.02.04
홈페이지 개편  (0) 2019.02.04
아마존 오로라 사용기  (0) 2019.02.04
이전 for organic searching  (0) 2019.02.04

+ Recent posts