일반적인 Application
Operating System 위에서 실행된다.
Platform(H/W+OS)에 종속적.
Windows용 App, Linux(x86)용 App, Linux(ppc)용 App, IBM-Unix(ppc)용 App, Solalis(sparc)용 App…
Java Application
Java VM 위에서 실행된다.
Platform에 독립적
Java VM 자체는 Platform에 종속적이다.
Compiler, Interpreter
Compiler
ASCII 타입의 소스 코드를 기계가 이해하는 Binary 코드로 변환화는 과정을 거처 실행 파일을 작성/실행
Interpreter
소스코드를 interpreter가 한 줄 씩 읽어 번역/실행
자바의 특징
Platform Independent
어느 OS에서 컴파일을 해도 JRE만 설치되어 있으면 타 OS에서도 실행된다.
platform이 달라도 소스코드를 고치거나 재 컴파일 할 필요가 없다.
웹 브라우져에서 바로 실행된다.(브라우져가 JVM을 가지고 있다.)
컴파일러 언어 - 자바컴파일러
소스파일(~~~.java)을 컴파일 해 목적파일(~~~.class) 작성
순수한 인터프리터 보다 실행속도가 월등히 빠르다.
OS에 독립적인 바이너리 코드(Byte Code)를 생성한다.
인터프리트 언어 - 자바인터프리터
목적파일(~~~.class)을 읽어들인 후 실행
JVM은 Platform에 종속적
객체지향(Object Oriented)
네트워크 보안에 탁월한 언어
웹 문서에서 실행되는 프로그램을 만드는 언어
재사용성이 높다.
.java / .class / 객체
.java
붕어빵 틀의 설계도
자바로 작성된 프로그램의 소스 파일
.java를 컴파일하여 ~.class 파일을 만들어 낸다.
.java 파일을 어떻게 수정해도 이미 만들어지 ~.class 파일은 아무런 영항이 없다.
.class를 가지고 무슨 짓을 해도 ~.java에는 아무 영향이 없다.
.java에서 변경된 내용을 적용하려면 다시 컴파일 하는것이 유일한 방법
.class
붕어빵 틀
ByteCode 파일
.java를 컴파일 한 결과
JavaVM이 .class를 읽어와 Java객체(Object 또는 instance)를 JavaVM이 관리하는 메모리내 Garbage Collected Heap이라는 곳에 객체를 생성한다.
메모리내 java객체를 가지고 무슨일을 해도 .class는 영향을 받지 않는다.
객체(Object 또는 instance)
JavaVM이 .class를 읽어와 기억장치(JavaVM이 관리하는 메모리내 Garbage Collected Heap))에 생성하여 연산장치(CPU)에 의해 처리가능한 상대의 실체
Object와 instance는 모두 같은 의미로 약간의 뉘앙스만 다를 뿐
Object – 일반적인 의미의 객체 (애기, 아들)
instance – 어떤 특정 클래스를 이용해 만들어졌다는 의미의 객체(영인네 애기, 영인이의 아들)
자바가상머신(Java Virtual Machine : JVM)
하드웨어와 자바 프로그램 사이에서 일한다.
자바 ByteCode파일( .class 파일)이 Platform(OS)에 비 종속적일수 있도록 만들어 준다.
JDK, OS 혹은 Web Browser에 포함되어있다.
Instruction Set(CPU) 제공
Register set (CPU를 제어하기 위한) 명령어 집합
Class file format
Stack
Garbage-collected heap -> 객체가 생성되는 곳
Memory area
Garbage Collection
메모리 내에 위치하며 더 이상 사용되지 않는 것들을 메모리에서 삭제한다.
다른 언어에서는 위의 일이 프로그래머의 몫이다.
Java는 메모리 관리를 위해 System-level-Thread를 제공한다.
Garbage collection 은 더 이상 필요하지 않은 memory를 체크하고 free memory 를 확보한다.
자동으로 수행된다.
System.gc()를 이용하여 Garbage collection을 요청할수는 있지만 System.gc()가 호출되자마자 Garbage collection이 수행되는 것은 아니다. Garbage collection이 수행될 시간은 VM이 결정한다.
java.lang.Object클래스의 public void finalize()메소드는 그객체가 GC에 의해 없어지기 직전에 호출된다. – GC에 의해 객체가 사라지기 전에 반드시 해야 할 일이 있다면, finalize메소드를 오버라이딩하여 finalize메소드의 구현부에 그 일을 하도록 코딩한다.
import
package 선언이 되어있는 클래스는 언제나 반드시 정식명칭으로 불려져야한다.
만약 이용하려는 클래스나 인터페이스의 정식이름이 아닌 클래스이름만을 이용하려면, import 문을 선언한다.
pack선언문 다음에, 클래스(또는 인터페이스)선언문 앞에 선언한다.
여러개의 import 문을 선언할수 있다.
import 키워드 하나당 하나의 package나 하나의 특정 클래스를 선언
ex) import java.util.Date;
소스파일 내에서 java.util.Date라는 클래스를 이용할것이며, 그 이름을 java.util.Date 대신 간단히 Date로 이용하겠다는 선언.
import java.util.*;
소스파일 내에서 java.util 패키지 내의 모든 클래스를 이용할수 있으며 이때 그냥 간단히 패키지이름을 제외한 클래스이름만으로 클래스를 이용하겠다는 선언.
java.lang 패키지에 있는 클래스 들은 import하지 않아도 된다.
public class
public class를 포함하는 소스 파일의 이름은 반드시 public 클래스의 이름.java가 되어야한다.
어떤 클래스가 public 이라면 이것은 공용을 할 것이라는 측면이 강하다.
하나의 소스 파일 내에 여러 개의 클래스가 하나의 소스 파일 안에 있을 수 있으나 그 중 하나만이 public 클래스 일수 있으며 또한 그 소스 파일은 반드시 public 클래스의 이름.java로 만들어져야 한다.
public static void main(String [] args)
Java 프로그램을 실행할 시작 위치
main메소드를 가지고 있지 않은 자바 Application은 그놈 자체로 실행시칼수 없다.
프로그램 실행 시 주는 인수는 메인 메소드의 String 타입의 배열인 args에 저장된다.