자바 전에 C++컴퓨터 프로그램의 전형적인 개발과 실행 과정을 보면,
1. 프로그램 코딩(Editing)
2. 전처리기(Preprocessing)
3. 프로그램 컴파일(Compiling)
4. 링크를 통한 실행 파일 생성(Linking)
5. 적재(Loading)
6. 실행(Execution)
C++은 위와같은 과정을 거쳐 실행 파일이 생성된다.
우선 텍스트 에디터(요즘은 IDE 툴을 사용하지만, 대부분)를 이용하여 코드를 작성한다.
컴파일 하기전에 전처리 명령어 #define #ifdef #undef 등을 전처리기가 처리한다.
- 다른 텍스트 파일등을 포함시키는 과정 등.
컴파일은 말 그대로, 텍스트로 쓰여진 프로그램 코드를 실행가능한 코드(기계어, 또는 Object Code)로 바꾸는 과정이다.
링크는 다른 곳에 정의된, 즉 표준 라이브러리(standard library)나 그 외의 사적 라이브러리(private library)등에
정의된 함수(function)들을 컴파일 시 빈 곳에 채워 넣는 일을 한다.
링크 작업이 끝나면 실행 가능한 코드가 생성된다.
적재 작업은 실행 가능한 이미지를 디스크로부터 읽어서 메모리에 적재 하는 것이다.
마지막으로, CPU의 통제로 프로그램을 한 명령어씩 실행한다.
이제 자바 프로그램의 개발과 실행 과정을 알아보자.
1. 프로그램 코딩(Editing)
2. 프로그램 컴파일(Compiling)
3. 적재(Loading)
4. Bytecode 검증(Verification)
5. 실행(Execution)
자바는 위의 과정을 거쳐 실행된다.
C++의 전처리, 링크가 빠지고, Bytecode 검증 과정이 추가되었다.
자바는 컴파일 되면, 실행 단계에서 사용될 Bytecode를 생성된다.
이 Bytecode는 자바 가상 머신(Java Virtual Machine-JVM)에 의해 실행된다.
물론, 실행되려면 메모리에 프로그램을 적재한다. 이 일은 Class loader에 의해 수행된다.
메모리에 적재된 후에 Bytecode Verifier가 코드의 유효성을 확인한다.
- 특히, 보안 제한을 위반하지 않았나를 검사.
그리고나서, JVM이 프로그램의 Bytecode를 실행한다.
이제 전세계 개발자에게 가장 유명한 프로그램인 Hello, World!를 출력하는 프로그램을 배워보자.
public class HelloWorld { //main method begins execution of Java application public static void main(String args[]) { System.out.println("Hello, World!"); } } |
자 위 코드에서 "//"로 시작하는 부분은 주석이다.
물론 "/*" ~ "*/"를 사용하여, 여러줄의 주석을 처리할 수 있다.
위 코드는
public class HelloWorld
라는 class 선언으로 시작한다.
모든 자바 프로그램은 개발자에 의해서 정의된 하나 이상의 class 선언을 포함한다.
public 키워드는 후에 객체지향에 관하여 설명하게 되면, 자세히 설명하기로 하고,
여기서는 그냥 모든 class 선언에 사용하는 것으로 하자.
public static void main(String args[])
자바 응용프로그램의 시작점으로 main 메소드(method)이다.
일반적으로 자바 프로그램은 하나 이상의 메소드를 가진다.
자바 프로그램에 main 메소드가 없으면 JVM은 프로그램을 실행하지 않을 것이다.
void 키워드는 함수가 수행되고 아무것도 반환하지 않음을 나타낸다.
System.out.println("Hello, World!");
위 한 줄은 따옴표 한의 문자를 출력할 것을 지시한다.
System.out은 Standard Output Object로 명령창에 일련의 문자를 출력하는 것을 허용해준다.
자바 프로그램(또는 대부분의 C언어 파생 언어)에서 {} 중괄호는 class또는 함수의 시작 끝을 나타낸다.
그리고, 쎄미콜론(;)은 명령의 끝마침을 나타낸다.
줄이 바뀌어도 쎄미콜론이 나오지 않으면 명령이 끝난 것이 아니다.
이로써 우리는 자바 프로그램에 발을 살짝 담궜다.
오늘은 여기까지.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
12 | Java 기초 - Parameter를 가진 메쏘드의 선언 | Eugene | 2025.04.16 | 34 |
11 | Java 기초 - 메쏘드를 가진 클래스의 선언과 클래스의 객체를 예시화(instantiate)하기 | Eugene | 2024.03.25 | 59 |
10 | Java Heap Sort(힙 정렬) | Eugene | 2022.04.12 | 309 |
9 | Java Max Heap(자바 맥스 힙) | Eugene | 2021.09.16 | 221 |
8 | Java - Binary Tree(자바 이진 트리) | Eugene | 2021.08.17 | 276 |
7 | Java Tree(자바 트리) - 자식 노드들을 리스트 자료구조를 사용하여 구현 | Eugene | 2021.04.01 | 2539 |
6 | JAVA Linked List(링크드 리스트) [1] | Eugene | 2021.02.09 | 792 |
5 | Java 기초 - 재귀 함수를 이용한 최대값 구하기 | Eugene | 2019.05.14 | 1101 |
4 | Java 기초 - while, for [2] | Eugene | 2018.04.05 | 860 |
3 | Java 기초 - 조건문 if | Eugene | 2017.11.03 | 757 |
2 | Java 기초 - 두 정수 입력 받아 합 구하기 | Eugene | 2017.11.01 | 3771 |
» | Java 기초 - Hello, World! | Eugene | 2017.09.27 | 1780 |