얼마전에 인터넷을 통하여 Java Tutorial 3판을 구매했다. 앞으로 무엇을 해볼까? 하는 생각이 하루에 몇차례씩 머리속을 헤집어 놓을때마다 뭔가를 하기위해서 나에게 필요한 지식이 있어야 한다는 생각을 다시한번 상기하게 되었다.(반복되는 생각인듯..) 아무래도 무엇가를 하기위해서는 나에게 언어에 대한 지식이 필요하다는 생각을 하게 되었고…그리고 선택한 언어가 자바가 되어버렸다.. 구매한 책을 1장을 읽고나니 정리가 되지 않는듯하여 한동안 손을 놓고나니 다시 허탈해진다. 작심..이러한 말로 끝나지 않았으면 했는데…왠지 불안하게 만든다.. 다시한번 마음을 가다듬고 정리를 통해서 열심히 해야겠다..

Java란 Sun에서 만든 객체지향언어(Object oriented Language)로 구문이 기존의 대표적인 언어인 C,C++과 매우 유사한 형태를 취한다. Java로 개발할 수 있는 것들은 applet, application, servlet, JSP(Java Server Page)등이있다. 대부분의 사람들이 Java하면 applet을 생각하는 경우가 많은데 applet은 java로 개발할 수 있는 것들중의 일부이다. applet은 웹서버에 존재하고 있다가 브라우저를 통하여 다운로드되어서 사용자의 PC에서 수행되는 java프로그램이다.

java의 소스코드는 .java확장자로 저장되는 텍스트 파일로 컴파일을 통하여 수행가능한 bytecode라는 파일이 생성되고 이 파일의 확장자는 .class를 가진다. bytecode인 .class파일은 .exe파일처럼 실행가능한 파일은 아니고 class파일을 해독할수 있는 인터프리터가 있어야 한다. 이 인터프리터가 JVM(Java Virtual Machine)이다. 이 JVM에 의해서 java에 의하여 개발된 프로그램은 OS에 상관없이 사용가능하게 된다.

java는 thread를 쉽게 만들 수 있다는 장점이 있다. 여기서 process와 thread를 잠깐 비교를 해보면…기존의 언어는 process라는 것이 각각의 program에 할당되어 process자신의 code, data를 가지게 되므로 process가 하나씩 증가할때 마다 시스템에 부하가 늘어나게 된다. 또한, process간의 데이터 공유도 어려운 문제가 있다. process내에서 생성되는 thread들은 혼자서 자신의 고유한 작업을 할 수 있는 프로그램안의 프로그램이다. thread들이 생성될때는 process만큼 시스템에 부하를 주지않으며 code나 data공유가 쉽다.

프로그램을 개발하는 프로그램머는 자신이 사용한 메모리를 시스템에 반납해야하는 의무가 있는데 java는 thread로 구현된 garbage collection이 그 일을 자동으로 수행한다.

- java의 소스코드를 입력하기 위한 에디터는 덱스트에디터면 무엇이라도 좋다. 입력한 소스코드의 파일이름은 class의 이름과 똑같아야하고(대소문자까지) 확장자는 .java로 저장되어야 한다. 저장된 소스코드를 컴파일하기 위해서는 본인의 PC에 JDK(J2SE)가 설치되어 있어야 하고 아래와 같이 입력한다.
javac HelloWorldApp.java
위와같이 컴파일을 하면 HelloWorldApp.class라는 이름의 bytecode파일이 생성된다. 이 bytecode파일을 실행하기 위해서는 아래와 같이 입력한다.
java HelloWorldApp

- class는 사용자가 직접만들어 사용하는 것과 또 하나는 JDK(or J2SE)안에 포함되어 있거나, 혹은 기존에 누군가 만들어 놓은 class가 있다. 이런 class들이 워낙 많다보니 관련이 있는 것끼리 묶기 위하여 package라는 것이 등장하게 되었다. package(java.lang, java.io)는 class들의 묶음이라고 보면된다.
java.lang package에는 수많은 class들이 들어가 있는데 이것들은 java가 수행되는 아주 기본적인 class들이다. 따라서, 모든 java source에 이 package가 아래와 같이 import명령으로 포함되어야 하는데 이 문이 생략되어도 자동으로 포함된다.
import java.lang.*;
import문은 C언어의 include문과 유사하지만 include문처럼 copy를 해오는 것이 아니고 단지 class의 위치만 알려주는 것이다.
아래는 java source code의 일반적인 layout이다.
package xxx;
import xxx.xxx.*;
class선언부분

package구문이 생략된 경우에는 생성된 class를 package로 묶지 않겠다는 의미로 현재 폴더에 class파일만 생성된다. 만약에 아래와 같이 package구문이 포함되었다면..
package test; //compile명령: javac -d . HelloWorldApp.java
현재 폴더에 자동으로 test라는 폴더가 생성되고 그 밑에 class파일이 생성된다.

import구문에 사용되는 dot(.)의 의미는 폴더 구분자이다. 만약에 x.y라는 package를 만들었다면 실제적으로 현재폴더에 x라는 폴더가 생성되고 그 밑에 y라는 폴더가 셍성되고 그 밑에 class파일이 위치하게 된다.

Posted by salgunamu
: