우리는 매일 컴퓨에 설치된 워드 프로세서와 스프레드 시트 등 다양한 프로그램을 쓰고 있습니다.
워드 프로세서와 같은 프로그램을 사용한다는 것은 문자를 표시하고, 문자를 꾸미고, 인쇄하는 것과 같은
특정한 일을 컴퓨터에 지시하여 처리하고 있다고 생각할 수 있습니다.
컴퓨터가 어떤 일을 처리하기 위해서는 사용자의 컴퓨터가 그 일의 내용을 이해할 수 있어야 합니다.
이를 위해서, 원래는 기계어(machine code)라 불리는 언어로 프로그램을 만듭니다.
그러나 아쉽게도 기계어는 "0"과 "1"이라는 숫자의 나열로 구성되어 있습니다.
컴퓨터라면 0과1이 나열되어 있는 기계어를 이해할 수 있겠지만 인간은 이해하기 할 수 없습니다.
그래서 "기계어보다 인간의 언어에 가까운 수준의 프로그래밍 언어"라고 불리는 것들이 지금까지 여럿 나왔는데요.
Java도 이와 같은 프로그래밍 언어 중 하나입니다.
Java언어는 컴파일러(compiler)와 인터프리터(interpreter)라는 두 가지 소프트웨어를 사용하여 기계어로 번역됩니다.
이 기계어를 통해서 컴퓨터가 실질적인 처리를 수행하고요.
컴파일러와 인터프리터가 무엇인지 알아보기 위해 메모장에 소스 파일(source file)을 만들어 보겠습니다.
저는 Sample1이라는 이름의 텍스트 파일을 만들고 내용을 추가해주었습니다.
class Sample1{
public static void main(String[] args){
System.out.println("저희 블로그에 오신걸 환영합니다!");
}
}
입력이 끝나면 파일에 이름을 붙여 저장합시다. 저희는 지금 .txt파일이지만 .java으로 바꿔줍시다.
이것을 확장자라고 합니다. 이 코드를 저장한 파일은 소스 파일이라고 합니다.
이렇게 소스 파일을 작성해보았는데요. 곧바로 프로그램을 실행하여 문자를 표시할 수 없습니다.
Java언어로 작성된 소스파일은 먼저 컴파일(compile)이라 불리는 작업을 거쳐야 합니다.
컴파일이란 Java 코드를 바이트 코드(byte code)라는 특수한 형식의 코드로 변환하는 작업을 말합니다.
이 작업을 수행하기 위해 컴파일러(compile)라는 소프트웨어를 사용합니다.
그렇다면 컴파일 방법을 살펴보아야겠죠?
먼저 Windows PowerShell을 실행해줍시다.
실행하게 되면 해커들이 사용할 것만 같은 터미널창이 나옵니다.
이제는 아까 소스 파일을 작성했던 디렉토리로 이동합니다.
javac Sample1.java -encoding utf-8
컴파일이 완료되었다면 소스 파일이 저장되어 있는 디렉토리에 Sample1.class 라는 파일이 만들어집니다.
이 파일을 클래스 파일(class file)이라고 부릅니다. 클래스 파일은 코드를 바이트 코드 형식으로 변환한 것입니다.
클래스 파일이 만들어지면 프로그램을 실행할 수 있습니다.
JDK에서 프로그램을 실행할 때는 인터프리터(interpreter)라는 소프트웨어를 사용합니다.
인터프리터를 작동하려면 java라는 명령어를 입력합니다.
Sample1은 클래스 이름이라고도 합니다. 이 때, 클래스 이름의 대소문자를 잘못 입력하지 않도록 주의해주세요!
java Sample1
잘 실행되었나요? 인터프리터는 바이트 코드를 해석하여 컴퓨터에 명령을 실행하는 역할을 합니다.
Java 인터프리터는 Java 가상 머신(Java Virtual Machine)이라는 이름으로 불리기도 합니다.
이렇게 생성된 Java 바이트 코드(클래스 파일)은 Windows에서도, UNIX에서도 원칙적으로 동일하게 실행할 수 있습니다.
다른 환경의 컴퓨터에도 클래스 파일만 있다면 누구라도 같은 프로그램을 수행할 수 있는 것입니다.
보통 다른 프로그래밍 언어에서는 이러한 일이 불가능합니다. Windows, UNIX 등 컴퓨터 환경별로 실행 형식의
프로그램을 따로 만들어야 합니다. 이러한 특징은 다양한 환경의 컴퓨터가 네트워크를 통해 이용되고 있는 가운데,
Java의 강점이 되고 있습니다.
'Java' 카테고리의 다른 글
[Java] 메서드 A 부터 Z 까지 (feat. 오버로딩) (1) | 2024.02.23 |
---|---|
[Java] 향상된 for문 (0) | 2024.02.18 |
[Java] 2차원배열 (0) | 2024.02.15 |
[Java] 배열 이래도 이해가 안된다고? (0) | 2024.02.15 |
[Java] Scanner (1) | 2024.02.14 |