<31353DB1E8BBF3C8C62E687770>

Size: px
Start display at page:

Download "<31353DB1E8BBF3C8C62E687770>"

Transcription

1 자바네이티브메소드를위한통합개발환경 Integrated Development Environment for Java Native Methods 김상훈세명대학교컴퓨터학부 Sang-Hoon 요약다양한모바일장비의등장으로인하여해당장비에서실행가능한응용프로그램의요구가증가하고있다. 플랫폼독립적이란특성을가지는자바언어는이러한환경에최적의프로그래밍언어로급부상하고있다. 그러나자바는가상기계에의해실행되므로플랫폼의존적인기능을제공하지못하는단점을가진다. 썬마이크로시스템즈에서는이러한문제점을해결하기위해자바네이티브메소드라는 JNI 기술을제시하였다. JNI 기술을이용하기위해서는 JVM의내부구조와 JNI에대한풍부한지식이필요하다. 또한수많은 JNI 함수의사용으로인하여프로그램개발생산성과품질의저하를초래하고있다. JNI에대한지식없이쉽고빠르게네이티브프로그래밍이가능하도록도와주는지원도구의필요성대두되고있다. 이를위해서는자바언어와 C/C++ 언어사이에존재하는구문과의미상차이점을자동적으로처리해주어야한다. 본연구에서자바와 C/C++ 언어간에차이점과이를극복하기위한방안을제시하고이를바탕으로개발한 JNI 통합개발환경을소개한다. 중심어 : 자바 자바네이티브인터페이스 자바가상기계 Abstract As a result of a growing demand for various mobile devices, the demand for application programs on the devices is on the rise. The Java language that is platform-independent rapidly rose as the best programming language for mobile devices. However, the Java has a problem that does not support platform-dependent features needed by the application. To solve this problem, the JNI technology was introduced by Sun Microsystems. Programmers using the JNI to write native methods need to have a lot of knowledge about the JNI and the internal structure of the JVM. Also, the increased load by using a number of JNI functions may decrease software productivity and quality. Demands for tools writing native method without understanding of JNI are progressively increasing. To develop these tools, it is necessary to translate automatically the differences between Java and C/C++. In this study, I suggested a way to overcome differences between both languages and developed JNI editor that is an integrated develope environment on the basis of this. keyword : Java Java Native Interface Java Virtual Machine 접수번호 : # 접수일자 : 2010 년 05 월 27 일 심사완료일 : 2010 년 06 월 29 일교신저자 : 김상훈,

2 자바네이티브메소드를위한통합개발환경 123 I. 서론다양한모바일장비들의증가에비례하여콘텐츠의수요또한급속히증가하고있다. 플랫폼에독립적이라는자바언어 [9] 의특성은이러한상황에최적이다. 그러나자바는소프트웨어적으로이루어진자바가상기계 (Java Virtual Machine: JVM)[10] 를사용하므로플랫폼의존적인작업및기존코드의재사용의어려우며실행속도저하를가져온다. 이문제를해결하기위해썬마이크로시스템즈는자바네이티브인터페이스 (Java Native Interface: JNI)[7] 라는기술을제시하였다. JNI 기술은자바와네이티브언어간의교량역할을제공한다. 현재는사용가능한네이티브언어로 C와 C++ 가있다. JNI를사용하기위해서는 JVM의내부구조와 JNI에대한지식을요구한다. 또한 JVM과의적절한정보교환을위해다수의전처리와후처리과정이필요하다. 따라서 JNI에대한충분한지식을가지고있더라도각종 JNI 함수의적절한선택과처리는시간소모적이고지루한작업이며, 이는소프트웨어개발생산성과품질의저하를가져오고있다. 이문제로고생하는개발자들에게도움을줄수있는통합개발환경 (Integrated Development Environment: IDE) 인 JNIEditor를본연구에서제시한다. 본도구는자바프로그램과 C/C++ 프로그램상호간에자료및제어전달에필요한다양한전처리및후처리과정을자동으로처리하여프로그래머가두언어간의정보전달체계를의식하지않고프로그래밍에집중할수있다. 또한 JNI를사용하기위해서는헤더파일생성, 네이티브메소드구현, 컴파일, 동적라이브러리생성등다수의부가작업이필요하다. JNIEditor는이상에서열거한기능을통합적으로수행하여주는통합개발환경이다. 역사적으로 C 언어에서 C++ 로, C++ 에서자바로발전하는과정을가진다. 이러한역사적배경으로인하여기본문형과자료형측면에서자바와 C/C++ 는매우유사한형태를가진다. 그러나자바의클래스, 필드, 메소드란개념은 C 언어에존재하지않으므로이에대응하 는 C 언어의개념이필요하다. 본연구에서는클래스를파일로변환하고, 필드와메소드를파일영역을가지는외부정적변수와외부함수로변환한다. 자바의기본자료형과참조형은 C 언어의기본형과포인터로대응시켜변환한다. C++ 언어는 C 언어에비해엄격한형검사 (type checking) 를수행한다는점을제외하면 C 언어는 C++ 언어의진부분집합 (proper subset) 이다. 이성질을이용하여네이티브언어로는 C와 C++ 를모두가능하도록하였다. 논문의구성은다음과같다. 기존환경에서네이티브메소드작성의어려움과이를해결하기위한관련연구를 2장에서살펴본다. 3장에서는자바언어와 C/C++ 언어간의차이를극복하고상호연결시기위한방안을제시하고, 3장에서제안한방법에따라구현된 JNIEditor 및사용사례를 4장에서설명한다. 5장평가및결론에서는연구의성과와제약사항을알아보도록한다. Ⅱ. 연구배경연구의필요성에대해알아보도록하자. 우선명령어창또는통합개발환경에서 JNI를사용하는데어려움을알아보고, 이를해결하기위한기존연구와지원라이브러리들의문제점에대해살펴본다. 최근가장많이사용되는자바를위한통합개발환경에는 Eclipse[3] 와 NetBeans[1] 가있다. 이들은프로그램작성, 컴파일, 테스트, 디버깅, 실행등을통합적으로지원하는개발환경으로일반자바프로그램개발에집중되어있다. 명령어창또는기존통합개발환경에서네이티브메소드를구현하는과정과그의어려움을알아본다. 네이티브메소드선언 sumarray() 를포함한 SumTester 클래스인 [ 그림 1] 과, 그선언에해당하는네이티브메소드구현인 [ 그림 2] 를살펴보자. 네이티브메소드를구현한함수는 JNI 명세에따라변형되어네이티브메소드선언과다른형태의함수원형을사용하여야한다. 그리고그함수의매개변수 arr로전달된정수배열은 JVM 내부에유지되므로 C 코드에서직접접근할수없다. 배열객체를접근하기위해서는버퍼

3 124 한국콘텐츠학회논문지 '10 Vol. 10 No. 7 를할당후, 그버퍼로정수형배열을얻어오는 JNI 함수 GetIntArrayRegion 을사용하거나, 또는 [ 그림 2] 와같이배열의원소로직접접근할수있는포인터를얻어오는 GetIntArrayElements라는 JNI 함수를사용하여야한다. 전달된배열을가지고작업을수행한후, 더이상네이티브코드가자바의기본형배열을접근하지않는다는것을 JVM 알리기위해 ReleaseArrayElements를호출하여야한다. 이를행하지않으면변경된배열의내용이 JVM에반영되지않는다. import java.util.*; public class SumTester { private native int sumarray(int[] arr, size); public static void main(string[] args) { Scanner scan = new Scanner(System.in); SumTester st = new SumTester(); int[] arr = new int[5]; for(int i = 0; i < arr.length; i++) arr[i] = scan.nextint(); scan.close(); System.out.println(st.sumArray(arr)); static { System.loadLibrary("SumTester"); #include "SumTester.h" 그림 1. class SumTester JNIEXPORT jint JNICALL Java_SumTester_sumArray(JNIEnv *env, jobject obj, jintarray arr, jint size){ jint * carr; jint sum = 0; int i; carr = (*env)->getintarrayelements(env, arr, NULL); if(carr == NULL) return 0; for(i=0; i < size; i ++) sum += carr[i]; (*env)->releaseintarrayelements(env, arr, carr, 0); return sum; 그림 2. 네이티브메소드 sumarray 단순히배열의합을구하는프로그램에서조차도 JNI 에서요구하는형태로변형된네이티브함수이름의작 성및 JNI가사용하는자료형의이해가필요하며자바배열을접근하기위한전처리와후처리과정을요구하고있다. 이는 JVM과의인터페이스인 JNI를충분히습득한프로그래머에게조차도귀찮고지루한작업이며이로인하여코딩오류를유발시킬가능성이크고개발생산성저하를야기한다. 기존개발환경을사용한네이티브메소드구현의어려움을해소하기위해이러한복잡한처리과정을 C++ 의 template 기능을이용하여캡슐화를시도한연구 JNI - C++ inegration made easy" 가있다 [4]. [ 그림 3] 은이연구에서제시한 JNI 캡슐화프레임워크를사용하여네이티브메소드구현예이다. // JniExample.java public class JniExample { public int intfield = 17; public int[] intarray = new int[2];... private static native void native_call(jniexample x);... // jni_example.cpp JNIEXPORT void JNICALL Java_JniExample_native_1call( // 가 JNIEnv* env, jclass clazz, jobject obj) { // Lookup the Java fields in 'obj' JNIField<jint> intfield(env, obj, "intfield"); // 나 JNIStringUTFChars str(env, "JniExample", "stringfield"); // 다 // Set new values intfield = 0; arr[0]=0; arr[1]=0; 그림 3. JIN 캡슐화프레임워크를사용한코드 [ 그림 3] 의 jni_example.cpp" 의함수원형 ( 가 ) 을살펴보면기존방식과동일하게변형된함수원형을사용하여야한다. 다시말해서 JNI 명세를인지해야한다는것이다. C++ 의 constructor와 destructor가각각전처리와후처리를담당하고있다. 따라서네이티브코드에서자바객체를접근하기위해서는네이티브코드구현자가접근하는멤버단위로 [ 그림 3] 의나, 다와같은코드를삽입하여주어야한다. 이방법은 JNI 함수복잡한사용부담을덜어주는장점은가지나대신위연구에서

4 자바네이티브메소드를위한통합개발환경 125 제시한템플릿의사용이란새로운부담이생기고있다. 마지막으로 C++ 템플릿을기반으로하고있어네이티브언어로 C 언어를사용할수없다는한계점을가진다. 이외에현재기존네이티브코드로작성된라이브러리의수월한호출을가능하도록도와주는 JNA[8], HawtJNI[5], GlueGen[6] 등이있다. 이들도구들은자바환경에서 JNI의존재를의식하지않고네이티브함수들을자유로이호출할수있도록도와주는라이브러리또는도구들이다. 그러나 C 환경에서자바객체의접근에대한고려는없거나또는빈약하다는단점을가진다. 또한 JNI를대신하는새로운클래스와메소드를습득해야하는추가부담을가진다. 본연구에서는네이티브언어로 C와 C++ 모두사용가능하며변형되지않은네이티브메소드선언을그대로사용하고자한다. 또한자바언어와네이티브언어상호간에 JNI의존재를의식하지않고접근할수있도록하고자한다. 더구나기존통합개발환경은 JNI 네이티브메소드번역및실행을위해많은부가적인작업을수동으로해야한다. 이또한매우불편한일이다. 따라서네이티브코드작성, javah 를사용한헤더파일생성, 동적라이브러리생성, 실행을통합적으로수행할수있는도구를개발하고자한다. Ⅲ. 자바와네이티브언어의연결 JNIEditor 는자바환경과네이티브코드환경간의차이를극복해주는코드를자동으로생성하여주어야한다. 이를지원하기위한네이티브코드환경의기본구조와수행작업에대해알아보도록하자. 자바객체와네이티브메소드상호간의접근은다음두가지관점으로나누어고려해야한다. 첫째는자바객체에서네이티브함수를호출하는것이고, 두번째는네이티브함수에서자바객체의필드를접근하고자바메소드를호출하는것이다. JNI의존재를의식하지않고상호간에접근또는호출을가능하도록하기위해서는두언어간에구문구조및의미의차이를해결하여 주어야한다. 자바의기본자료형과 C/C++ 의기본자료형은유사하나동일하지않다. 구조자료형 (structured data type) 은다른모양을가진다. 따라서자료형간의변환이필요하다. 매개변수의전달에서도차이를보인다. 기본자료형에서는두언어모두값전달방식 (call by value) 을취하고있으나구조자료형의경우자바는 C/C++ 의포인터또는참조전달의형태만을취하고있다. JNIEditor를사용하는개발자는 C/C++ 와자바언어를모두알고있는프로그래머를대상으로한것이므로이러한차이점의극복은문제가되지않는다. 본논문에서는유사하나역할에있어중요한차이를보이는몇가지메소드 ( 함수 ) 가등장한다. 이를간단히그리고명료하게설명하기위해용어를명확히정의가필요하다. 자바클래스에나타나는네이티브메소드선언에대응되며, JNI 명세에따른함수헤더를가지는함수를자바네이티브메소드구현이라하겠다. 그리고네이티브메소드구현의실재실행코드를가지고있는함수를 C 언어에서는메소드라는용어대신함수란용어를사용하고있으므로네이티브함수라기술할것이다. 이네이티브함수에서자바메소드를직접호출할수없다. 호출하기위해서는메소드 ID를얻어와 Call<Type>Method 를사용하여간접적으로호출하게된다. 또한매개변수의변환이필요하다. 이러한과정을대리로처리하여호출해주는함수를프락시함수 (proxy function) 라하겠다. 자바클래스 네이티브메소드 1 선언네이티브메소드 2 선언. 네이티브메소드 n 선언 자바메소드 네이티브메소드프레임 n... 네이티브메소드프레임 2 네이티브메소드프레임 1 네이티브메소드구현 전처리 후처리 네이티브함수 그림 4. 자바메소드와네이티브메소드간의관계 네이티브함수에서필드와메소드를자유로이접근

5 126 한국콘텐츠학회논문지 '10 Vol. 10 No. 7 하기위해서는그의참조가네이티브언어환경내에미리정의되고초기화되어있어야한다. 이러한참조는네이티브메소드단위로존재한다. 이러한참조와네이티브함수그리고부가선언들을포함하고있는파일단위의구조를네이티브메소드프레임이라하겠다. 네이티브코드환경은네이티브메소드의개수만큼의네이티브메소드프레임을가지며이는파일로만들어진다. 네이티브메소드와자바객체가상호간에접근을처리하여주는다양한변수및함수선언으로이루어진네이티브메소드프레임은파일영역을갖는다. [ 그림 4] 는이상에서설명한자바메소드, 네이티브메소드선언, 네이티브메소드구현, 네이티브함수들간의관계를그림으로표현한것이다. 3.1 네이티브함수의호출자바메소드에서네이티브함수의호출은네이티브메소드구현부분을경유하여간접호출이이루어진다. 이를그림으로도시하면 [ 그림 5] 이며그림의원숫자는호출순서이다. 자바메소드는네이티브메소드선언을참조하여호출을한다. [ 표 1] 은네이티브메소드선언, 네이티브메소드구현, 네이티브함수의헤더를보여주고있다. 네이티브메소드선언과달리 JNI 명세규칙에따라작성된네이티브메소드구현은아주상이한형태를가진다. 그러나네이티브메소드선언과네이티브함수는유사한형태를보여주고있다. 네이티브메소드구현자는네이티브함수의원형을참고하여네이티브프로그램을작성하게된다. 표 1. 네이티브메소드의종류별헤더 메소드종류 네이티브메소드선언 네이티브메소드구현 네이티브함수 메소드헤더 public native int getport(short num, String str) JNIEXPORT jint JNICALL Java_NMSim_getPort( JNIEnv *_env, jclass _cls, jshort num, jstring str) long getport(short num, const char * str) 자바메소드가네이티브함수를호출하는경우매개변수로전달되는자료와반환으로돌려받는값에대해고려하여보자. 기본자료형은두언어간에유사하다. 매개변수전달방식은모두값전달방식을사용하고있으므로 [ 표 2] 와같이대응하는자료형으로의단순변환만으로직접접근하여사용가능하다. 자바에서구조자료형은 C의입장에서보면모두포인터이다. 또한직접접근은불가능하며 JNI을경유하여접근하여야한다. 따라서자바에서전달받은구조자료형의객체는 C 언어에서접근할수있는형태로변환해주어야한다. 자바는구조자료형으로배열, 클래스, 인터페이스를제공하고있다. 그러나네이티브코드에서복잡한구조를가지는객체를접근하는경우는드물며다단계의전후처리부담으로인하여비효율적인구현이되기쉽다. 따라서본연구에서는자바참조형중에서접근가능한자료형은스트링과기본형배열로제한하고있다. 표 2. 기본자료형매핑 자바클래스 네이티브메소드프레임 i 네이티브메소드구현네이티브함수 자바 C/C++ 언어 자바 C/C++ 언어 boolean unsigned char long long long byte signed char float float 네이티브메소드 i 선언 자바메소드 1 전처리 2 char unsigned short double double short short void void int long 4 3 후처리그림 5. 네이티브함수호출 매개변수로전달된자바스트링은 JNI 함수인 GetStringUTFChars 을사용하여 C 스트링으로변환하여읽어온다. 이때자바스트링의자료형은 jstring이

6 자바네이티브메소드를위한통합개발환경 127 며 C 스트링의자료형은 const char* 이다. 반환된스트링의사용을종료하면 ReleaseStringUTFChars를호출하여 C 스트링을위해사용된메모리를 free해주어야한다. 스트링과마찬가지로배열도 C 환경에서직접접근하여사용할수없다. C 환경에서기본형배열을직접접근할수있도록배열로의포인터를얻어오기위해 JNI 함수 Get<Type>ArrayElements 를사용하고, 사용을종료한후이사실을 JVM에알리고변경사항을반영하기위해 Release<Type>ArrayEmements를호출해야한다. C 언어의배열과는달리자바배열은원소의개수를나타내는 length 속성을가진다. 이차이점을해소하기위해매개변수로전달된각배열마다 length 변수가추가적으로필요하다. 메소드이름과배열명그리고 length 를연결한 methodname_arrayname_ length 형태의정적외부변수를두어처리한다. 매개변수로전달된기본형배열과이에대응하는 C 언어의배열형간의대응관계는 byte[] 는 char *, short[] 는 short *, int[] 는 long * 등이며 [ 표 2] 의나머지자료형도유사한형태로대응된다. 지금까지매개변수를통하여자바환경에서부터네이티브언어환경으로전달된객체의접근방법을자료형별로나누어살펴보았다. 3.2 자바객체의필드접근네이티브함수에서자바객체의필드를접근하는방법에대해살펴보도록하자. 자바의필드는매개변수와는달리기본자료형도직접접근이불가능하다. 필드의값을참조하기위해서는 GetFieldID 와 Get<Type>Field를사용하여필드의값을네이티브언어환경으로가져와야한다. 또한네이티브함수에서필드의값을변경하였다면 Set<Type>Field 를사용하여변경사항을자바객체에반영시켜야한다. 이와같이기본자료형에서조차도전처리와후처리과정이요구된다. 자바객체의필드에해당하는변수를네이티브언어환경인네이티브메소드프레임파일의정적외부변수로등장시키고전후처리하는과정이필요하다. 자바클래스 필드선언 int f1; double f2; 자바메소드 1 1 네이티브메소드프레임 i 네이티브메소드구현 3 전처리 후처리 그림 6. 필드의접근과변경반영 static int f1; 2 static double f2; 네이티브함수 // access f1 sum = f1; 필드의접근및변경반영과정을 [ 그림 6] 에서보여주고있다. JNIEditor는네이티브함수구현자가접근이필요한필드를선택하도록하고있다. 모든필드를네이티브메소드프레임영역으로이동시킨다면사용하지않는필드가발생할수있다. 사용하지않는필드에대한전처리와후처리과정은불필요한자원의낭비를초래한다. 따라서필요한필드를사용자가선택하도록하였다. 사용자에의해선택된각필드는그에해당하는정적외부변수로 C 환경에생성되고, 전처리과정을통하여정적외부변수의값을해당필드의값으로초기화된다. 이후네이티브함수에서이정적외부변수를자바의필드로고려하여자유로이접근할수있다. 사용이종료된후, 즉네이티브함수의종료직후변경된필드의내용은후처리과정을통하여자바객체의실제필드에반영하게된다. 나머지자료형들간의대응관계와접근방법은매개변수와동일하다. 본방법에제약사항이존재한다. 네이티브함수에서필드의값을변경한후자바메소드를호출하여그필드의값을참조한다면변경된값을접근할수없다. 이는네이티브함수의종료후수행하는후처리과정에서변경에대한반영을수행하기때문에발생하는문제이다. 이를해결하기위해서는모든자바메소드호출전에변경에대한반영을수행해야하나이는전체환경에너무많은부담을초래하므로이를제한하기로하였다. 3.3 자바메소드의호출 네이티브함수에서자바객체의메소드를호출하는

7 128 한국콘텐츠학회논문지 '10 Vol. 10 No. 7 call-back에대해알아보도록하자. 네이티브언어환경에존재하는네이티브함수에서자바메소드를호출하기위해서는다음과정이필요하다. 첫째 GetObjectClass 와 GetStaticMethodID 를호출하여메소드식별자를얻어야한다. 그다음반환자료형이 Type인메소드를호출하기위해서는 Call<Type>Method 를사용하여호출하게된다. 이때네이티브함수에서자바메소드로전달하는자료와자바메소드에서반환받는자료의변환이필요하다. 자료의변환과자바메소드의호출을함께모아처리하여주는프락시함수개념을도입하여처리하도록하였다. 프락시함수는매개변수로전달된자료의변화, 자바메소드호출, 반환된자료의변환이란 3가지작업을수행하게된다. 첫단계는프락시함수가전달받은매개변수를자바메소드가접근할수있는자바객체로변환하는전처리과정이다. 기본자료형은 [ 표 2] 의자료형매핑테이블에따라단순형변환으로직접전달가능하다. 그러나구조자료형에대해서는자바객체를생성하는과정을수행해야한다. C 스트링의경우는자바스트링으로변환하기위해 NewStringUTF를사용해야되며, 배열의경우는 New<Type>Array를사용하여새로운자바배열객체를생성하여야한다. 이때 C 언어에서배열은배열원소의개수에대한정보를가지고있지않다. 따라서 call-back에의해호출가능한메소드의매개변수가배열을포함하고있다면 methodname_arrayname_length 형태의미리정의된정적외부변수를가지고있어야하며, 자바메소드호출전에네이티브함수에서초기화해주어야한다. 두번째단계는 Call<Type>Method 를사용하여호출하고반환값이있으면이를반환받는단계이다. 마지막후처리단계는반환받은값을네이티브함수에서접근가능한형태로변환한후, 프락시함수를호출한네이티브함수로값을되돌려보내는작업으로네이티브메소드구현의전처리단계와유사하다. 이상에서설명한내용을네이티브함수에서자바메소드의호출과정을 [ 그림 7] 에서보여주고있다. 자바클래스 자바메소드 2 자바메소드 네이티브메소드프레임 i 프락시함수 전처리 후처리 네이티브메소드구현 1 4 그림 7. 자바메소드의호출 Ⅳ. JNIEditor 의구현과사용사례 static int f1; static double f2; 네이티브함수 // call 메소드 2 자바객체와 C/C++ 함수간에 JNI를의식하지않고자유로이상호접근하기위해서는네이티브메소드프레임이어떠한구조를가져야하는지 3장에서살펴보았다. 본장에서는 JNIEditor의구성과실제사용사례를통해본시스템의이해와필요성, 그리고방법의옳음을보이고자한다. 이시스템에서네이티브메소드프레임을생성하기위해서는클래스파일로부터필드, 메소드, 매개변수등의주요정보를얻어야한다. 이를위해 Apache Jakarta Project 중에하나인 BCEL(Byte Code Engineering Library)[2] 을사용하였다. BCEL 라이브러리를사용하여얻어진클래스정보를바탕으로 3장에서언급한네이티브메소드프레임을생성한다. 주변환경은 GUI 패키지인 swing 을사용하여자바로구현하였으며전체구조는 [ 그림 8] 과같다. [ 그림 8] 에서막대인간이지시하는자바클래스와네이티브함수틀부분을제외하면나머지부분은자동으로지원되는부분이다. 사용자는네이티브메소드선언을포함한자바클래스를작성하고네이티브함수프레임내부에위치한네이티브함수틀에 C/C++ 를사용하여코드를작성한다. 완성된네이티브함수를포함한각각의네이티브메소드프레임들은생성되어파일로만들어진다. 이파일들은 C/C++ 컴파일러에의해한개의동적라이브러리로구성된다. 마지막으로자바클래스파일과라이브러리는 JVM에함께적재되어실행된

8 자바네이티브메소드를위한통합개발환경 129 다. 이상의과정은 JNIEditor에의해자동으로이루어진다. 1 4 자바클래스자바컴파일러 코딩 BCEL 네이티브메소드프레임생성기 외부선언생성 필드코드생성 네이티브메소드구현생성 클래스파일 코딩 프락시함수생성 네이티브함수틀 3 7 자바가상기계실행결과 javah 헤더파일 동적라이브러리 네이티브메소드 1 네이티브메소드 2... 네이티브메소드 n 그림 8. JNIEditor 의구조 C/C++ 컴파일러 public class NTester { int jdata[] = {3, 5, 7, 9; String errormsg; 그림 9. JNIEditor 의실행 public native static int sumarray(int[] data); public native void printfield(); public native void calljm(); 네이티브메소드선언을포함한자바클래스를예제로하여본도구를사용하는방법과생성된프로그램을살펴보도록하자. [ 그림 9] 는 [ 그림 10] 의 class NTester 의번역된클래스파일을읽어들인상태이다. 영역 1 은필드선택창으로자바클래스의필드를보여주고, 영역 2는자바클래스의메소드를보여주고있다. 영역 3은명령어라인매개변수를직접입력할수있는창이있다. 영역 4 리스트박스는자바클래스에포함된네이티브메소드선언을가지고있다. 사용자가리스트박스에서네이티브메소드선언을선택하면영역 6에그에해당하는네이티브메소드프레임이나타나며, 그내부에 C/C++ 코드를작성할수있는네이티브함수틀인영역 5가포함되어있다영역 7은표준출력또는표준오류를출력하기위한윈도우를가지고있다. public String getmsg() {... int getvalue(short index){... public static void main(string[] args) { int data[] = {3, 5, 7, 9; NTester nt = new NTester(); System.out.println(sumArray(data)); nt.printfield(); nt.calljm(); System.out.print("In Java: "); for(int val: nt.jdata) System.out.print(val + ","); System.out.println(); static { System.loadLibrary("NTester"); 그림 10. Class NTester [ 그림 10] 의첫번째네이티브메소드인 sumarray는매개변수로넘어온정수형배열의내용을합하여결과를반환하는함수라가정하자. C 언어에서배열은원소의개수를포함하고있지않다. 따라서배열의길이에대한정보가변수 sumarray_arg0_length에유지하고있다. 이변수의값은네이티브메소드구현의전처리단계에서초기화된다. 배열의길이정보를이용하여구현된네이티브함수는 [ 그림 11] 과같다.

9 130 한국콘텐츠학회논문지 '10 Vol. 10 No. 7 long sumarray(long* arg0){ long sum = 0; int i = 0; for(i = 0; i < sumarray_arg0_length; i++) sum += arg0[i]; return sum; 그림 11. sumarray() 함수의구현 다음으로자바필드를접근하는예를알아보자. [ 그림 10] 의두번째네이티브메소드에서필드 jdata 의내용을그대로출력하고값을변경하여주는네이티브함수를작성하여보자. 불필요한전처리부담을경감하기위해필드선택창에서접근할필드를사용자가선택하여야한다. 이는 [ 그림 12] 의 1과같이네이티브환경으로이동된배열과배열길이선언한코드의생성을야기시킨다. 선택을해제한다면 1 코드부분을자동으로삭제될것이다. 필드또한매개변수처리와마찬가지로네이티브메소드구현의전처리부분에서초기화되고변경사항은후처리부분에의해반영될것이다 그림 12. 네이티브메소드 printfield() [ 그림 13] 은필드의값을모두출력하고각원소에 10 을더하는프로그램이다. 네이티브함수 printfield() 의실행결과인 In C: array 와배열을갱신한내 용을자바에서출력한결과인 In Java:13,15,17,19, 를 [ 그림 12] 의 3에서확인할수있다. void printfield(){ // TODO: Insert a code for the Native method! printf("in C: array "); for(int i = 0; i < jdata_length; i++) { printf("%d ", jdata[i]); jdata[i] += 10; printf("\n"); 그림 13. printfield() 함수의구현 void calljm(){ // TODO: Insert a code for the Native method! printf("in C => %s\n", getmsg()); 그림 14. calljm() 함수의구현 마지막으로네이티브함수에서자바메소드를호출하는 Call-back 에대해알아보도록하자. [ 그림 12] 의 2는일반자바메소드에해당하는프락시함수선언이다. 이메소드의존재는 [ 그림 9] 의 2와 [ 그림 10] 에서각각확인할수있다. 이프락시함수선언은정적네이티브메소드 sumarray의프레임영역에서나타나지않는다. 정적네이티브메소드에서는인스턴스메소드를호출할수없기때문이다. 그러나 printfield() 는인스턴스네이티브메소드이므로프락시함수선언부가필요하고, 또한프락시함수정의가네이티브메소드프레임하단에포함되어있다. 네이티브함수에서자바메소드를호출하여문자열자료를얻어출력하는프로그램은 [ 그림 14] 와같다. 프로그램의실행결과는 [ 그림 12] 의 3에서 "In C:=>Hello" 로알수있다. 이와같 이자바메소드를대리로호출하여주는프락시함수를두어네이티브함수에서일반 C 함수를호출하는방법과동일하게자바함수를호출할수있음을보여주었다. 이상에서설명한방법으로각네이티브메소드선언당한개의네이티브메소드프레임이생성되며이는파일형태로저장되어진다. 자바클래스 NTester 는 3

10 자바네이티브메소드를위한통합개발환경 131 개의네이티브메소드프레임파일이생성되어지며공유라이브러리형태로번역되고링크되어 JVM에의해사용된다. [ 그림 15] 는 JNIEditor 에의해자동으로생성된네이티브메소드프레임파일중 "public native void printfield()" 를위한프레임파일이다. /* NTester_printField.cpp */ #include"ntester.h" // Field declaration,cnt:1 static long* jdata; static jsize jdata_length; static JNIEnv* _env;... 중략... static long getvalue(short); void printfield(){ // TODO: Insert a code for the Native method!... 중략... //Don't edit the following statements. JNIEXPORT void JNICALL Java_NTester_printField(JNIEnv *_env, jobject _obj){ jclass _cls = _env->getobjectclass(_obj); jfieldid _fid_jdata, _fid_errormsg; jintarray _jarr_jdata; jstring _jstr_errormsg; _envobjcopy(_env, _obj); //s,f,0,4 _fid_jdata = _env->getfieldid(_cls, "jdata", "[I");... 중략... //<printfield(); //-> //e,f,0,1 _env->releaseintarrayelements(_jarr_jdata, jdata, 0); const char * getmsg(){ jstring _retval; const char * _nretval; _cls = _env->getobjectclass(_obj); _mid = _env->getmethodid(_cls, "getmsg", "()Ljava/lang/String;"); _retval = static_cast<jstring>(_env->callobjectmethod(_obj, _mid)); _nretval = _env->getstringutfchars(_retval, NULL); return _nretval; long getvalue(short arg1){... 중략... Ⅴ. 평가및결론플랫폼이다양해짐에자바의사용분야가급속히증가하고있는추세이다. 그러나플랫폼의존적인작업의한계를극복하기위해 JNI을사용해야한다. JNI 기술을이용하기위해서는부가적지식과수많은 JNI 함수의사용으로인하여프로그램개발생산성과품질의저하를초래하고있다. 이러한문제점은기존의통합개발환경에서해결하지못한다. C++ template class에 JNI 전처리및후처리캡슐화를시도한연구에서는이상의문제점은어느정도완화시키고있다. 그러나 template class의사용으로인하여 C 컴파일러의사용이불가능하고또한 template class의사용법습득이란부담이발생한다. HawtJNI, GlueGen, JNA 등은자바환경에서네이티브함수로의호출에중점을두고있어 C 환경에서자바객체의필드와메소드접근이어려움을가진다. 이에비해본 JNIEditor은두언어의양방향접근이가능하며추가적지식습득의부담이없음을 4장에있는 [ 그림 11][ 그림 13][ 그림 14] 의사용자작성네이티브코드를보면확인할수있다. 본아이디어의옳음을확인하기위해 4장에서실제구현된 JNIEditor 를사용하여얻어진실행결과를보여주었다. 본도구가지원하는자료형은기본자료형과배열, 그리고스트링으로제한된다. JNI의일반적사용은기존코드의재사용, 실행속도향상, 플랫폼의존적인작업의수행이다. 우선네이티브코드로작성된코드의재사용은자바클래스제작이전에존재하는코드이므로해당객체의내부를접근하는코드는존재하지않는다. 두번째로실행속도향상을위해네이티브메소드를사용하는경우이다. 복잡한객체의잦은내부접근은오히려실행속도의저하요인으로등장한다. 이는이전연구에서실험을통하여입증하였다. 마지막은플랫폼의존적인작업을하고자네이티브메소드를사용한경우이다. 이는대부분하드웨어나운영체제를직접제어하거나또는자료를교환하는경우이므로기본자료형또는단순배열로작업이가능하다. 그림 15. 자동생성된메소드프레임

11 132 한국콘텐츠학회논문지 '10 Vol. 10 No. 7 참고문헌 [1] Amit Kumar Saha, "Beginning JNI with NetBeans C/C++ Pack 6.0, Linux," inning-jni-linux.html [2] BCEL. [3] Eclipse. [4] Evgeniy Gabrilovich, Lev Finkelstein, "JNI - C++ integration made easy", C/C++ Users Journal, Vol.19, Issue CMP Media, Inc [5] HawtJNI, [6] GlueGen, https//gluegen.dev.java.net [7] Java Native Interface Specification. guides/jni/spec/jnitoc.html [8] JNA, [9] Ken Arnold, James Gosling, and David Holmes, The Java Programming Language Fourth Edition, Addition Wesley, [10] Tim Lindholm and Frank Yellin, The Java Virtual Machine Specification Second Edition, Addison Wesley, 저자소개 김상훈 (Sang-Hoon Kim) 정회원 1989년 2월 : 동국대학교컴퓨터공학과 ( 공학석사 ) 1996년 8월 : 동국대학교컴퓨터공학과 ( 공학박사 ) 1997년 3월 ~ 현재 : 세명대학교컴퓨터학부부교수 < 관심분야 > : 프로그래밍언어, 컴파일러, 소프트웨어공학

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 08 함수 01 함수의개요 02 함수사용하기 03 함수와배열 04 재귀함수 함수의필요성을인식한다. 함수를정의, 선언, 호출하는방법을알아본다. 배열을함수의인자로전달하는방법과사용시장점을알아본다. 재귀호출로해결할수있는문제의특징과해결방법을알아본다. 1.1 함수의정의와기능 함수 (function) 특별한기능을수행하는것 여러가지함수의예 Page 4 1.2

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

PowerPoint Presentation

PowerPoint Presentation 자바프로그래밍 1 배열 손시운 ssw5176@kangwon.ac.kr 배열이필요한이유 예를들어서학생이 10 명이있고성적의평균을계산한다고가정하자. 학생 이 10 명이므로 10 개의변수가필요하다. int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; 하지만만약학생이 100 명이라면어떻게해야하는가? int s0, s1, s2, s3, s4,

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

슬라이드 1

슬라이드 1 UNIT 6 배열 로봇 SW 교육원 3 기 학습목표 2 배열을사용핛수있다. 배열 3 배열 (Array) 이란? 같은타입 ( 자료형 ) 의여러변수를하나의묶음으로다루는것을배열이라고함 같은타입의많은양의데이터를다룰때효과적임 // 학생 30 명의점수를저장하기위해.. int student_score1; int student_score2; int student_score3;...

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 자바의기본구조? class HelloJava{ public static void main(string argv[]){ system.out.println( hello,java ~ ){ } } # 하나하나뜯어살펴봅시다! public class HelloJava{ 클래스정의 public static void main(string[] args){ System.out.println(

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 # 메소드의구조자주반복하여사용하는내용에대해특정이름으로정의한묶음 반환형메소드이름 ( 매개변수 ) { 실행문장 1; : 실행문장 N; } 메소드의종류 Call By Name : 메서드의이름에의해호출되는메서드로특정매개변수없이실행 Call By Value : 메서드를이름으로호출할때특정매개변수를전달하여그값을기초로실행하는메서드 Call By Reference : 메서드호출시매개변수로사용되는값이특정위치를참조하는

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

TEST BANK & SOLUTION

TEST BANK & SOLUTION TEST BANK & SOLUTION 어서와자바는처음이지!" 를강의교재로채택해주셔서감사드립니다. 본문제집을만드는데나름대로노력을기울였으나제가가진지식의한계로말미암아잘못된부분이있을것으로사료됩니다. 잘못된부분을발견하시면 chunik@sch.ac.kr로연락주시면더좋은책을만드는데소중하게사용하겠습니다. 다시한번감사드립니다. 1. 자바언어에서지원되는 8 가지의기초자료형은무엇인가?

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 자료구조자바세미나 Week1 00 Contents 목차 01 Introduction 02 JAVA? 03 Basic Grammar 04 Array 05 String 06 Class & Method 07 Practice 01 Introduction 자료구조자바세미나기본소개 일시장소 IDE 대상 매주수요일저녁 6 시 (2019.03.20 ~ 2019.04.10)

More information

Data Structure

Data Structure Function & Pointer C- 언어의활용을위한주요기법 (3) Dong Kyue Kim Hanyang University dqkim@hanyang.ac.kr 함수의인자전달 함수의인자전달 함수의인자전달방식 인자전달의기본방식은복사다. 함수호출시전달되는값을매개변수를통해서전달받는데, 이때에값의복사가일어난다. int main(void) int val = 10;

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++, Level 1은객관식사지선다형으로출제예정 1. 다음은 POST(Post of Sales Terminal) 시스템의한콜레보레이션다이어그램이다. POST 객체의 enteritem(upc, qty) 와 Sale 객체의 makellineitem(spec,qty) 를 Java 또는 C ++, C # 언어로구현하시오. 각메소드구현과관련하여각객체내에필요한선언이있으면선언하시오.

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 인터페이스 배효철 th1g@nate.com 1 목차 인터페이스의역할 인터페이스선언 인터페이스구현 인터페이스사용 타입변환과다형성 인터페이스상속 디폴트메소드와인터페이스확장 2 인터페이스의역할 인터페이스란? 개발코드와객체가서로통신하는접점 개발코드는인터페이스의메소드만알고있으면 OK 인터페이스의역할 개발코드가객체에종속되지않게 -> 객체교체할수있도록하는역할 개발코드변경없이리턴값또는실행내용이다양해질수있음

More information

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap06-1Array.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-1 참고자료 배열 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 배열의선언과사용 같은형태의자료형이많이필요할때배열을사용하면효과적이다. 배열의선언 배열의사용 배열과반복문 배열의초기화 유연성있게배열다루기 한빛미디어

More information

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문 1. 표준입출력 표준입출력 입력 : 키보드, scanf 함수 출력 : 모니터, printf 함수문제 : 정수값 2개를입력받고두값사이의값들을더하여출력하라. #include int main(void) int Num1, Num2; int

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 손시운 ssw5176@kangwon.ac.kr 실제세계는객체로이루어진다. 2 객체와메시지 3 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 4 객체 5 객체란? 객체 (Object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

쉽게

쉽게 Power Java 제 4 장자바프로그래밍기초 이번장에서학습할내용 자바프로그램에대한기초사항을학습 자세한내용들은추후에. Hello.java 프로그램 주석 주석 (comment): 프로그램에대한설명을적어넣은것 3 가지타입의주석 클래스 클래스 (class): 객체를만드는설계도 ( 추후에학습 ) 자바프로그램은클래스들로구성된다. 그림 4-1. 자바프로그램의구조 클래스정의

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

ThisJava ..

ThisJava .. 자바언어에정확한타입을추가한 ThisJava 소개 나현익, 류석영 프로그래밍언어연구실 KAIST 2014 년 1 월 14 일 나현익, 류석영 자바언어에정확한타입을추가한 ThisJava 소개 1/29 APLAS 2013 나현익, 류석영 자바 언어에 정확한 타입을 추가한 ThisJava 소개 2/29 실제로부딪힌문제 자바스크립트프로그램분석을위한요약도메인 나현익,

More information

Microsoft Word - JNI.doc

Microsoft Word - JNI.doc JNI: JAVA 와 C++ 의연동 출처 : C++ for Java Programmers 저자 : Mark Allen Weiss 번역및추가 : Frank Yoon (moses@maru.net) 테스트환경 : Windows XP, Java 1.5, Visual Studio 6.0, Vim 7.x JVM 에서네이티브함수는 C 나 C++ 과같은언어로구현됩니다. JDK

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]

More information

Microsoft PowerPoint 장강의노트.ppt

Microsoft PowerPoint 장강의노트.ppt 클래스와객체 클래스와객체 객체 : 우리주변의어떤대상의모델 - 예 : 사람, 차, TV, 개 객체 = 상태 (state) + 행동 (behavior) - 예 : 개의상태 - 종자, 이름, 색개의행동 - 짖다, 가져오다 상태는변수로행동은메소드로나타냄 객체는클래스에의해정의된다. 클래스는객체가생성되는틀혹은청사진이다. 2 예 : 클래스와객체 질문 : 클래스와객체의다른예는?

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

SFCMVCLHFEXZ.hwp

SFCMVCLHFEXZ.hwp 21-1-R02 가상기계를위한네이티브인터페이스정의언어 (Native Interface Definition Language for Virtual Machine) 박지우 * 이창환 ** 오세만 동국대학교컴퓨터공학과 * 링크젠 {jojaryong * ** yich * ** smoh * }@dongguk.edu 요 약 가상기계란하드웨어로이루어진물리적인시스템과는달리소프트웨어로제작되어논리적인

More information

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public Chapter 9 Lab 문제정답 1. public class Circle private double radius; static final double PI=3.141592; // PI 이름으로 3.141592 로초기화된정적상수 (1) public Circle(double r) radius = r; (2) public double getradius() return

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

adfasdfasfdasfasfadf

adfasdfasfdasfasfadf C 4.5 Source code Pt.3 ISL / 강한솔 2019-04-10 Index Tree structure Build.h Tree.h St-thresh.h 2 Tree structure *Concpets : Node, Branch, Leaf, Subtree, Attribute, Attribute Value, Class Play, Don't Play.

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등

More information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터(강의) 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - Lect04.pptx OBJECT ORIENTED PROGRAMMING Object Oriented Programming 이강의록은 Power Java 저자의강의록을사용했거나재편집된것입니다. Class 와 object Class 와객체 클래스의일생 메소드 필드 String Object Class 와객체 3 클래스 클래스의구성 클래스 (l (class): 객체를만드는설계도 클래스로부터만들어지는각각의객체를특별히그클래스의인스턴스

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 가 제공하는 매크로 상수와 매크로

More information

PowerPoint Template

PowerPoint Template 10 포인터 1 주소 Address( 주소 ) 메모리에는그메모리의저장장소의위치를나타내는주소값 주소 (address) 는 1 바이트마다 1 씩증가하도록메모리에는연속적인번호가구성 2 주소연산자 & & 변수 변수의주소값을알아내려면변수앞에주소연산자 & (ampersand) 를이용 주소값이용장단점 주소값을이용하면보다편리하고융통성있는프로그램이가능 그러나복잡하고어려운단점

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 # 왜생겼나요..? : 절차지향언어가가진단점을보완하고다음의목적을달성하기위해..! 1. 소프트웨어생산성향상 객체지향소프트웨어를새로만드는경우이미만든개체지향소프트웨어를상속받거나객체를 가져다재사용할수있어부분수정을통해소프트웨어를다시만드는부담줄임. 2. 실세계에대한쉬운모델링 실세계의일은절차나과정보다는일과관련된많은물체들의상호작용으로묘사. 캡슐화 메소드와데이터를클래스내에선언하고구현

More information

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074> 객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

PowerPoint Presentation

PowerPoint Presentation Class : Method Jo, Heeseung 목차 section 1 생성자 (Constructor) section 2 생성자오버로딩 (Overloading) section 3 예약어 this section 4 메소드 4-1 접근한정자 4-2 클래스메소드 4-3 final, abstract, synchronized 메소드 4-4 메소드반환값 (return

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information