1.4.1 소스 작성에서부터 실행까지

자바 프로그램을 개발하려면 다음과 같은 순서로 진행해야 한다.

.java 소스 파일 작성 → 컴파일러(javac.exe)로 바이트 코드 파일(.class) 생성  → JVM 구동 명령어(java.exe)로 실행

자바 프로그램을 개발하기 위해서는 우선 파일 확장명이 .java인 텍스트 파일을 생성하고 프로그램 소스를 작성한다. 이렇게 만들어진 파일을 자바 소스 파일이라고 한다. 작성 완료된 자바 소스 파일은 컴파일러(javac.exe)로 컴파일해야  한다. 컴파일이 성공되면 확장명이 .class인 바이트 코드 파일이 생성된다. 예를 들어, 명령 프롬프트에서 Hello.java 소스 파일을 다음과 같이 컴파일하면 Hello.class 파일이 생성된다.

javac Hello.java

바이트 코드 파일은 완전한 기계어가 아니므로 단독으로 실행할 수 없고 JVM이 실행되어야 한다. JVM을 구동시키는 명령어는 java.exe이다. 예를 들어 Hello.class라는 바이트 코드 파일을 java.exe로 실행하려면 명령 프롬프트에서 다음과 같이 입력하고 Enter키를 누르면 된다. 주의할 점은 java.exe로 바이트 코드 파일을 실행할 때는 .class 확장명을 제외한 이름을 입력해야 한다.

java Hello

java.exe 명령어가 실행되면 JVM은 바이트 코드 파일(Hello.class)을 메모리로 로드하고, 최적의 기계어로 번역한다. 그리고 main() 메소드를 찾아 실행시킨다.


소스 작성에서부터 실행까지의 순서를 이해했다면, 다음 순서대로 실습을 진행해보자.


step 1. 메모장을 실행하고 다음과 같이 [파일]-[다른 이름으로 저장] 메뉴를 선택한다.


step 2. 저장 위치를 C:\Temp 디렉토리로 변경한다. 만약 C:\Temp 디렉토리가 없다면 새로 생성하길 바란다. 파일 이름에 "Hello.java"를 입력하고 [저장] 버튼을 클릭한다. 이때 H를 반드시 대문자로 입력한다.



step 3. 다음과 같이 자바 소스 파일을 작성하고 저장한다.


[Hello.java] 자바 소스 파일

public class Hello {

public static void main(String[] args) {

System.out.println("Hello, welcome to the java  world!");

}

}


위와 같은 소스 파일을 작성할 때는 다음과 같은 사항들을 주의해야 한다.

  • 1라인에서 Hello의 H가 대문자로 작성되어야 한다(파일명과 대소문자가 동일해야 한다).

  • 2라인에서 String의 S가 대문자로 작성되어야 한다.

  • 3라인에서 System의 S가 대문자로 작성되어야 한다.

  • 3라인 끝에 세미콜론(;)을 붙여준다.


step 4. 명령 프롬프트를 실행시키고,C:\Temp 디렉토리로 이동하기 위해 다음과 같이 입력한 후 Enter키를 누른다.



step 5. C:\Temp 디렉토리에 Hello.java 소스 파일이 있는지 확인하기 위해 dir 명령어를 실행해본다.



step 6. 컴파일러로 Hello.java 소스 파일을 다음과 같이 컴파일한다.



step 7. 상기 명령을 실행한 후 에러 메시지가 출력되지 않았다면 컴파일이 정상적으로 완료된  것이다. dir 명령어를 다시 실행해서 Hello.class가 생성되었는지 확인한다.



step 8. Hello.class를 실행하기 위해 JVM 구동 명령어인 java.exe를  다음과 같이 입력하고 Enter키를  누른다.



주의할 점은  프로그램을 실행할 때에 java Hello.class와 같이 바이트 코드의 확정명을 포함해서는 안 된다. 또한 바이트 코드 파일명과 대소문자가 일치해야 한다. 즉  H를 소문자로 입력하면 안 된다.  처음 자바를 배우는 분들이 가장 많이 실수하는 부분이다.



1.4.2 프로그램 소스 분석

Hello 프로그램의 소스 작성에서부터 실행까지 해보았다면, 이제 이 프로그램이 어떻게 해서 "Hello, welcome to the java world!"를 출력할 수 있었는지 살펴보자. 자바 실행 프로그램은 반드시 클래스(class) 블록과 main() 메소드(method) 블록으로 구성되어야 한다.  메소드 블록은 단독으로 작성될 수 없고 항상 클래스 블록 내부에서 작성되어야 한다. 클래스와 메소드를 간단하게 설명하면 다음과 같다.

  • 클래스 : 필드 또는 메소드를 포함하는 블록
  • 메소드 : 어떤 일을 처리하는 실행문들을 모아 놓은 블록


클래스에는 이름이 있는데, Hello가 클래스 이름이고, 그 다음에 있는 중괄호( { )부터 그와 짝을 이루는 중괄호( } )까지가 클래스 블록이다.


↙ 클래스 이름

public class Hello {


}



↘ 클래스 블록


클래스의 이름은 개발자가  마음대로 정할 수 있다.주의할 점은 소스 파일명과 대소문자가  일치해야 한다. 그리고 숫자로 시작할 수 없고, 공백을 포함해서도 안 된다. 클래스 블록에는 메소드를 작성할 수 있는데, 메소드는 클래스처럼 이름과 블록을 가진다. main이 메소드 이름이고, 중괄호( } )부터 그와 짝을 이루는 중괄호( } )까지가 메소드 블록이다.


↙ 메소드 이름

public static void main(String[] args) {

    System.out.println("Hello, welcome to the java world!")

}



↘ 메소드 블록


메소드 이름도 개발자가 마음대로 정할 수 있지만 main() 메소드 만큼은 다른 이름으로 바꾸면 안된다. 왜냐하면 java.exe로 JVM을 구동시키면 제인 먼저 main() 메소드를 찾아서 실행시키기 때문이다. 그래서 main() 메소드를 프로그램 실행 진입점(entry point)이라고 한다. 만약 클래스 내부에 main() 메소드가 없거나 잘못 작성하면 클래스를 실행할 수 없다. main() 메소드가 없는 클랫스를 java.exe로 실행시키면 다음과 같은 에러 메시지가 나타난다.


+ Recent posts