소스코드
- 개발자가 만드는 프로그래밍 코드를 소스 코드라고 부른다.
- 이러한 소스 코드는 개발자가 알아 볼 수 있는 형태로 만들게 되는데 이는 향 후에 기계가 알아 볼 수 있는 형태로 변경이 되어야지만 실행을 할 수 있다.
기계어
- 프로그램을 실행하는 시스템이 알아 볼 수 있는 형태로 만들어진 기계 입장에서의 소스 코드
- 시스템은 기계어로 되어져 있는 코드를 해독하여 작업을 하게 된다.
- 기계어는 시스템마다 다른 체계로 되어져 있어 시스템에 맞는 기계어로 제작이 되어야 지만 시스템이 인식하여 실행 할 수 있다.
컴파일러
- 개발자가 만든 소스 코드를 시스템이 인식 할 수 있는 형태로 만들어 주는 소프트웨어
- 이러한 과정을 컴파일 이라고 부르며 컴파일을 해주는 소프트웨어를 컴파일러 라고 부른다.
- 컴파일을 하여 만들어지는 결과물은 언어마다 다를 수 있는데 Java는 시스템이 인식 할 수 있는 언어 체계인 기계어가 아닌 JVM이 인식할 수 있는 바이트 코드로 만들어진다. 이러한 바이트 코드는 프로그램이 실행 도리 때 JVM에 의해 기계어로 변경되어 실행된다.
- 컴파일 명령어 : javac.exe xxx.java
- 컴파일 후 만들어지는 결과물 : xxx.class
인터프리터
- 컴파일 후 만들어지는 결과물이 기계어 코드라면 바로 실행이 가능하지만 운영되는 시스템마다 인식하는 기계어가 다르다는 점 떄문에 시스템에 맞는 프로그램을 하나 하나 다 만들어 줘 야 한다.
- java 언어는 컴파일 후 기계어로 만들어 지는 것 이 아니라 .class 라는 파일로 만들어 진다. 이렇나 .class 파일은 바이트 코드로 되어져 있다. 이렇게 만들어진 .class 파일의 코드를 실행 시 운영체제에 만든 기계어로 변경을 해주게 되는데 이러한 일을 해주는 것이 인터프리터 이다.
-java 에서는 만들어진 class 파일의 코드 내용을 실행되는 시스템에 맞게 실행 시 기계어로 변경되어 실행이 된다. 이러한 형태로 제공이 되기 때문에 프로그램을 개발 할 떄는 한번만 만들고 실행 시 JVM에 의해 시스템에 맞는 기계어로 변호나이 되기 때문에 시스템에 독립적으로 운영될 수 있다.
- 인터프리터 명령어 : java.exe xxxx
--프로그램을 실행 할 떄는 class 파일들 중에 main을 가지고 있는 클래스의 이름을 적어주면 실행이 된다.
JVM
자바 가상 머신
- 자바 바이트 코드를 실행 할 수 있는 소프트웨어
- 인터프리터를 통해 실행 시 실행 되는 시스템에 맞는 기계어로 변환하여 프로그램을 실행한다.
JVM 특성
- 스택 기반의 가상 머신
- 단일 상속 형태의 객체 지향 프로그래밍을 가상 머신 수준에서 구현
- 포인터를 지원하되 C와 같이 주소 값을 임의로 조작이 가능한 포인터 연산이 불가능
- 가비지 컬렉션을 사용
- 모든 기본 타임의 정의를 명확히 함으로써 플랫폼 독립성 보작
- 데이터 흐름 분석에 기반한 자바 바이트 코드 검증기를 통해 프로그램 실행시 발생되는 모든 위반 행위를 막아준다.
JVM 장점
- 플랫폼의 독립성
- 바이트 코드 실행의 안정성
- 높은 코드의 밀도
- 무선 통신 등 낮은 대역폭을 갖는 환경에서 요긴
JVM 단점
- 가상 컴퓨터가 필요
- 가상 컴퓨터의 설치를 위해 여분의 기억 공간이 필요
- 가상 컴퓨터의 실행을 위해 CPU 자원의 일부가 소모
- 실행 속도의 저하.
[ 현재는 시스템이 좋아서 크게 영향이 없다 ]
자바 프로그램의 실행 과정
- 먼저 자바 실행 명령을 전송해야 한다. 이 전송 방식은 사용되는 플랫폼에 따라 다를 수 있다. 일반적으로 자바에서는 당므과 같은 실행 명령어를 이용한다.
- java 이후에 적어 주는 이름은 컴파일을 통해 만들어 지는 class 파일을 지정하게 된다. 이 clas파일은 반드시 main이라는 요소를 가지고 있어야 한다. JVM은 지정한 class에서 main이라는 기능을 찾게 되고 찾게 된다면 main 내부의 코드를 작동시켜 프로그램을 실행하게 되는데 만약 main이 없다면 오류 메시지를 보여주면서 실행이 중단된다.
- 즉, java 이 후에 클래스 이름을 적어주는 것은 JVM에게 이 클래스 파일 에 main이 있다고 알려주는 것이다.
main 코드
public class ( 클래스 이름 ) {
public static void main (String [] args){
코드내용
}
}
이런식으로 구성이 됨.
요약
컴파일 : 개발자가 만든 소스코드를 class파일로 만드는 과정
인터프리터 : 만들어진 class파일을 기께어로 한줄한줄 변환하여 실행하는 과정
JVM : 자바 프로그램을 실행시키는 주체
실행시 작성해주는 클래스 이름은 main을 가지고 있는 클래스의 이름을 적어준다.