Java 시작하기
Java 시작하기
Java를 완전히 처음 시작하는 분들을 위한 입문 가이드예요. 자바 애플리케이션을 만들기 위해 필요한 기본 개념(컴파일과 실행, JDK 등)을 하나씩 짚어주고, 실제로 첫 Java 프로그램을 작성해서 컴파일하고 실행해보는 과정을 차근차근 따라갈 수 있게 구성했어요. 코드를 직접 타이핑하고 실행해보면서 Java의 동작 원리를 몸으로 익혀보세요.
본문
Java 애플리케이션의 구성 요소
정말 정말 참을성이 없어서 첫 Java 코드를 빨리 돌려보고 싶다면, 이 사이트에서 제공하는 Java Playground를 바로 사용해볼 수 있어요. 이 도구에서는 거의 모든 코드 조각을 시험해볼 수 있죠. 예를 들어 당연히 가장 먼저 시험해보고 싶은 Hello World! 출력도 가능해요. 아무것도 설치할 필요 없이, 그냥 Java 코드를 타이핑하고 실행 버튼을 누르면 끝이에요! 아래에서 이런 문장들을 더 시험해볼 수 있어요.
에디터에 코드를 타이핑하고, 그것을 실행해 첫 Java 애플리케이션이 실제로 움직이는 모습을 보고 싶은 마음이 간절하다는 걸 잘 알아요. 걱정하지 마세요. 이 튜토리얼이 끝날 무렵에는 그 기대가 충족될 거예요. 다만 그 전에, 여러분이 지금 하고 있는 일을 제대로 이해하기 위해 필요한 몇 가지 요소를 먼저 짚고 넘어가고 싶어요.
다른 프로그래밍 언어에 이미 익숙하고, 컴파일이 뭔지, 실행 파일이 뭔지 알고 있다 하더라도 아래 내용을 살펴볼 만해요. Java는 C나 C++과는 다르게 동작하는 면이 있거든요.
Java의 컴파일과 실행 사이클
Java 애플리케이션을 만들려면 거쳐야 할 몇 가지 과정이 있어요. 이 튜토리얼에서는 아주 간단한 Java 프로그램을 만드는 방법을 보여드릴게요. 엔터프라이즈 애플리케이션을 만들어야 한다면 생성 과정이 더 복잡하겠지만, 그 바탕에는 결국 이 단순한 단계들이 들어 있어요.
이 단계 중 첫 번째는 텍스트 에디터에 Java 코드를 작성하는 거예요.
그다음, 이 코드는 컴퓨터가 실행할 수 있는 다른 형식으로 변환되어야 해요. 이 변환 작업은 *컴파일러(compiler)*라는 특별한 소프트웨어가 담당해요. 어떤 언어는 컴파일러가 없기도 하지만 Java에는 있어요. 컴파일러는 각 언어마다 특화되어 있어요.
컴파일러가 만들어낸 파일은 흔히 바이너리 파일(binary file) 또는 **실행 파일(executable file)**이라고 불러요. 소스 코드는 사람이 읽고 이해할 수 있는 반면, 바이너리 파일이나 실행 파일은 사람이 읽기 위한 것이 아니에요. 그것을 해석할 수 있는 건 오직 컴퓨터뿐이에요.
이렇게 컴파일된 Java 코드에는 *바이트 코드(byte code)*라고 하는 특별한 바이너리 코드가 들어 있어요. 여러분이 마주칠 수 있는 기술 용어죠. 바이트 코드가 정확히 무엇인지 자세히 설명하는 것은 이 튜토리얼의 범위를 벗어나요.
코드를 컴파일하는 것은 실패할 수도 있어요. 컴파일러가 실행 가능한 버전을 만들어내려면 코드가 올바르게 작성되어 있어야 하죠. 걱정하지 마세요. 이 페이지에서 컴파일할 코드를 그대로 제공해드릴게요. 여러분이 할 일은 그것을 복사해서 텍스트 에디터에 붙여넣는 것뿐이에요.
컴파일러가 필요한 바이너리 파일을 만들어냈다면, 이제 이 바이너리 파일을 실행할 수 있어요. 이 바이너리 파일을 실행하면 프로그램이 돌아가는 거예요.
컴파일과 실행이라는 이 두 단계에는, JDK(Java Development Kit)에 포함된 두 가지 특별한 소프트웨어가 필요해요. 이 튜토리얼의 뒤쪽에서 JDK를 무료로 다운로드하고 설치하는 방법을 살펴볼 거예요.
참고로 Java SE 11부터는 .java 파일을 직접 실행하는 방식으로 이 두 단계를 하나로 합칠 수 있어요. 그리고 Java SE 22부터는 프로그램을 여러 파일에 나눠 담을 수도 있게 됐어요.
첫 번째 Java 프로그램 만들기
가장 먼저 알아야 할 사실은, 여러분이 작성하는 Java 코드가 **일반 텍스트 파일(plain text file)**에 저장된다는 점이에요. 이 튜토리얼에서 애플리케이션은 하나의 텍스트 파일로 작성될 거예요. 더 큰 애플리케이션은 이런 파일이 수천 개 필요할 수도 있어요.
그래서 첫 번째 과정은 사실 파일을 하나 만들고 이름을 붙이는 거예요. 앞으로 이 파일 이름이 MyFirstJavaApp.java라고 가정할게요. 물론 .java 확장자만 유지한다면 어떤 이름이든 붙일 수 있어요.
파일 이름의 첫 글자에는 몇 가지 제약도 있어요. 쉽게 하기 위해 첫 글자로 알파벳 문자를 쓰면 돼요. Java에는 관례가 하나 있는데, 바로 Java 파일 이름은 대문자로 시작해야 한다는 거예요. 이것은 의무는 아니지만 모든 Java 개발자가 따르는 관례예요. 여러분이 노련한 Java 개발자가 되면, 이 관례를 따르지 않는 클래스를 보면 뭔가 어색하게 느껴질 거예요.
이제 이 파일을 텍스트 에디터에서 열면 돼요. 한 가지 경고할 점은, 이 파일을 만들고 저장할 때 반드시 일반 텍스트 에디터를 사용해야 한다는 거예요. 워드 프로세서를 쓰면 안 돼요.
MyFirstJavaApp.java 파일을 열었다면, 다음 코드를 복사해서 붙여넣으면 돼요.
아시다시피 컴퓨터 과학에는 아주 오래된 전통이 있는데, 바로 애플리케이션의 콘솔에 "Hello, World!"를 출력하는 프로그램을 작성하는 거예요. 그럼 그걸 해볼게요!
void main() {
IO.println("Hello, World!");
}
첫 번째 프로그램 실행 준비
단순한 프로그램의 컴파일과 실행은, 첫 프로그램을 만든 직후에 이어지는 단 한 번의 과정이에요.
지금까지 여러분이 사용한 유일한 도구는 일반 텍스트 에디터였어요. 이 프로그램을 실행하려면 또 다른 도구가 필요한데, 아마 여러분 컴퓨터에 없을 수도 있죠. 다행히도 이 컴파일러를 무료로 내려받아 사용할 수 있어요. 그 과정을 안내해드릴게요.
지금 시점에서 "Java"를 다운로드한다는 것은 곧 JDK를 다운로드한다는 뜻이에요. JDK에는 많은 도구가 포함되어 있는데, 그중에는 Java 애플리케이션을 컴파일하고 실행하는 데 사용할 도구들도 있어요. JDK는 OpenJDK 프로젝트와 Oracle이 공식적으로 배포해요.
"Java"라고 불리는 다른 요소들에 대해 들어보셨을 수도 있어요.
JRE는 Java Runtime Environment를 뜻해요. JDK의 하위 집합으로, 더 이상 OpenJDK나 Oracle이 배포하지 않아요. JRE에는 Java 애플리케이션을 실행하는 데 필요한 도구만 들어 있었어요. JRE에 포함된 도구로는 코드를 컴파일할 수 없어요.
J2EE, Java EE, Jakarta EE에 대해 들어보셨을 수도 있어요. 이 약어들은 모두 Java Enterprise Edition을 가리켜요. 엔터프라이즈 등급 애플리케이션을 만들기 위한 도구와 라이브러리 집합이죠. Java EE는 JDK와는 다르며 이 튜토리얼의 범위를 벗어나요. 이 튜토리얼에서 만드는 간단한 애플리케이션을 컴파일하고 실행하는 데 Java EE가 필요하진 않아요.
Java Development Kit(JDK) 설정하기
JDK는 여러 곳에서 다운로드할 수 있어요. 항상 최신 JDK 버전을 안내해주는 원스톱 페이지가 하나 있는데, 바로 https://jdk.java.net/예요. 여기서 최신 "Ready for use" JDK 버전을 선택하면, 필요한 JDK 버전을 다운로드할 수 있는 페이지로 이동해요.
이 페이지에서는 다섯 가지 버전을 내려받을 수 있어요.
- Linux/AArch64
- Linux/x64
- macOS/x64
- macOS/AArch64
- Windows/x64
이 페이지는 생산 환경에서 바로 쓸 수 있는 오픈소스 JDK 빌드를 제공해요. 이는 GNU General Public License version 2와 Classpath Exception 조건 아래 배포되는 Java SE Platform 구현체예요.
Windows/x64용 JDK 설정
Windows 버전을 다운로드해볼게요. 내려받는 것은 약 200MB 크기의 ZIP 파일이며, 어떤 ZIP 유틸리티로든 열 수 있어요. 이 ZIP 파일 안에 JDK가 들어 있어요. 이 파일의 내용물을 컴퓨터 어디든 원하는 곳에 압축 풀면 돼요.
압축을 푼 다음에는, JDK를 푼 디렉터리를 가리키는 JAVA_HOME이라는 환경 변수를 만들어야 해요. 먼저 DOS 프롬프트를 열어야 해요. 만약 JDK 26 ZIP 파일을 D:\jdk\ 디렉터리에 풀었다면, 이 DOS 프롬프트에 입력해야 할 명령은 다음과 같아요.
> set JAVA_HOME=D:\jdk\jdk-26
이 예시와 다른 모든 예시에서 앞에 붙은 >는, 이 명령을 프롬프트에 입력하거나 붙여넣어야 한다는 걸 보여주기 위한 표시라는 점을 꼭 기억하세요. set 명령의 일부가 아니므로 이 문자를 직접 입력하거나 붙여넣으면 안 돼요.
JAVA_HOME 변수가 제대로 설정됐는지 확인하려면 다음 코드를 입력하면 돼요.
> echo %JAVA_HOME%
이 명령은 다음과 같이 출력해야 해요.
D:\jdk\jdk-26
그다음에는 PATH 환경 변수를 업데이트해서 JDK 디렉터리의 bin 디렉터리를 추가해야 해요. 이는 다음 명령으로 할 수 있어요.
> set PATH=%JAVA_HOME%\bin;%PATH%
이 두 변수를 설정할 때는 아주 조심해야 해요. 공백 하나만 잘못 추가되거나 세미콜론이 빠져도 실패하게 되거든요.
이 명령 프롬프트를 닫지 마세요. 닫았다가 다시 열면 이 두 변수를 다시 만들어야 하니까요.
Linux/x64용 JDK 설정
Linux 버전을 다운로드해볼게요. 내려받는 것은 .tar.gz 확장자를 가진 아카이브 파일이며, 이것을 풀어야 해요.
압축을 풀려면, 이 파일을 올바른 디렉터리로 복사하거나 이동한 다음 다음 명령을 입력하면 돼요.
$ tar xzf *.tar.gz
이 예시와 다른 모든 예시에서 앞에 붙은 $는, 이 명령을 프롬프트에 입력하거나 붙여넣어야 한다는 걸 보여주기 위한 표시예요. tar 명령의 일부가 아니므로 이 문자를 입력하거나 붙여넣지 마세요.
이 명령은 현재 디렉터리에 있는 .tar.gz 확장자를 가진 모든 파일을 풀어줘요. 특정 파일만 풀고 싶다면 파일의 정확한 이름을 쓰면 돼요.
이 명령을 실행하는 데는 시스템에 따라 몇 초 이상 걸릴 수 있어요. 현재 디렉터리에 JDK 내용물이 들어 있는 새 디렉터리가 생겨요.
완료되면, JDK를 푼 디렉터리를 가리키는 JAVA_HOME 환경 변수를 만들어야 해요. JDK 26 아카이브 파일을 /home/javauser/jdk 디렉터리에 풀었다면, 이 셸 프롬프트에 입력해야 할 명령은 다음과 같아요.
$ export JAVA_HOME=/home/javauser/jdk/jdk-26
정확한 디렉터리는 여러분이 푼 배포 파일에 따라 달라져요.
JAVA_HOME 변수가 제대로 설정됐는지 확인하려면 다음 코드를 입력하면 돼요.
$ echo $JAVA_HOME
이 명령은 다음과 같이 출력해야 해요.
/home/javauser/jdk/jdk-26
그다음에는 PATH 변수를 업데이트해서 JDK 디렉터리의 bin 디렉터리를 추가해야 해요. 이는 다음 명령으로 할 수 있어요.
$ export PATH=$JAVA_HOME/bin:$PATH
이 두 변수를 설정할 때는 아주 조심해야 해요. 공백 하나만 잘못 추가되거나 세미콜론이 빠져도 실패하게 되거든요.
이 셸 프롬프트를 닫지 마세요. 닫았다가 다시 열면 이 두 변수를 다시 만들어야 해요.
모든 것이 정상인지 확인하려면 다음 명령을 입력하면 돼요.
$ which java
여러분의 셸은 방금 푼 배포판의 bin 디렉터리에 있는 java 실행 파일의 전체 경로를 출력해야 해요. 이 예시에서는 다음과 같이 출력돼요.
/home/javauser/jdk/jdk-26/bin/java
macOS용 JDK 설정
macOS 버전을 다운로드해볼게요. 내려받는 것은 .tar.gz 확장자를 가진 아카이브 파일이며, 이것을 풀어야 해요.
압축을 풀려면, 이 파일을 올바른 디렉터리로 복사하거나 이동한 다음 다음 명령을 입력하면 돼요.
$ tar xzf *.tar.gz
이 예시와 다른 모든 예시에서 앞에 붙은 $는, 이 명령을 프롬프트에 입력하거나 붙여넣어야 한다는 걸 보여주기 위한 표시예요. tar 명령의 일부가 아니므로 이 문자를 입력하거나 붙여넣지 마세요.
이 명령은 현재 디렉터리에 있는 .tar.gz 확장자를 가진 모든 파일을 풀어줘요. 특정 파일만 풀고 싶다면 파일의 정확한 이름을 쓰면 돼요.
이 명령을 실행하는 데는 시스템에 따라 몇 초 이상 걸릴 수 있어요. 현재 디렉터리에 JDK 내용물이 들어 있는 새 디렉터리가 생겨요. 이 디렉터리는 .jdk 확장자를 가져요.
완료되면, JDK를 푼 디렉터리를 가리키는 JAVA_HOME 환경 변수를 만들어야 해요. JDK 26 아카이브 파일을 /Users/javauser/jdk 디렉터리에 풀었다면, 이 셸 프롬프트에 입력해야 할 명령은 다음과 같아요.
$ export JAVA_HOME=/Users/javauser/jdk/jdk-26.jdk/Contents/Home
정확한 디렉터리는 여러분이 푼 배포 파일에 따라 달라져요.
JAVA_HOME 변수가 제대로 설정됐는지 확인하려면 다음 코드를 입력하면 돼요.
$ echo $JAVA_HOME
이 명령은 다음과 같이 출력해야 해요.
/Users/javauser/jdk/jdk-26.jdk/Contents/Home
그다음에는 PATH 변수를 업데이트해서 JDK 디렉터리의 bin 디렉터리를 추가해야 해요. 이는 다음 명령으로 할 수 있어요.
$ export PATH=$JAVA_HOME/bin:$PATH
이 두 변수를 설정할 때는 아주 조심해야 해요. 공백 하나만 잘못 추가되거나 세미콜론이 빠져도 실패하게 되거든요.
이 셸 프롬프트를 닫지 마세요. 닫았다가 다시 열면 이 두 변수를 다시 만들어야 해요.
모든 것이 정상인지 확인하려면 다음 명령을 입력하면 돼요.
$ which java
여러분의 셸은 방금 푼 배포판의 bin 디렉터리에 있는 java 실행 파일의 전체 경로를 출력해야 해요. 이 예시에서는 다음과 같이 출력돼요.
/Users/javauser/jdk/jdk-26.jdk/Contents/Home/bin/java
첫 번째 Java 프로그램 컴파일하고 실행하기
JDK, JAVA_HOME 변수, PATH 변수를 제대로 설정했다면, 이제 첫 프로그램을 실행할 준비가 된 거예요.
지금부터 입력할 모든 명령은, 이 두 변수를 설정할 때 사용했던 것과 같은 프롬프트에 입력해야 해요.
Windows든 Linux든 macOS든 경로를 따라왔든, 나머지 과정은 동일해요.
-
첫 클래스
MyFirstJavaApp.java를 저장한 디렉터리로 이동하세요.dir을 입력하면 올바른 디렉터리에 있는지 확인할 수 있어요. 이 디렉터리에 있는 파일들을 보여줘요.MyFirstJavaApp.java파일이 보여야 해요. -
이 디렉터리에서 Java에 접근할 수 있는지 다음을 입력해 확인하세요. 이 명령은 Windows든 Linux든 동일해요.
> java -version
현재 사용 중인 Java 버전을 알려줘야 해요. 오류 메시지가 뜬다면 JAVA_HOME과 PATH 변수를 확인해봐야 해요. 대부분 그 변수들에 문제가 있는 경우예요.
- 이제 첫 프로그램을 실행할 준비가 끝났어요. 다음과 같이 입력하면 돼요.
> java MyFirstJavaApp.java
이 시점에서 두 가지가 일어날 수 있어요. Java 코드에 오류가 있어서 컴파일러가 코드를 컴파일하지 못한다는 오류 메시지가 나올 수도 있어요. 실행 결과를 보려면 그 오류들을 먼저 고쳐야 해요.
컴파일러가 조용히 아무 불평도 하지 않고 Hello World!를 출력한다면 축하해요! 이는 Java 프로그램이 제대로 컴파일되고 실행됐다는 뜻이에요.
프로그램을 대화형으로 만들기
프로그램을 한 단계 더 발전시켜서, 사용자의 이름을 물어보도록 만들어볼게요. 다음 코드를 복사해서 MyFirstJavaApp.java 파일에 붙여넣으세요.
void main() {
IO.println("Hello world!");
var name = IO.readln("What is your name? ");
IO.println("Hello " + name);
}
이전과 같은 방식으로 실행하면 돼요.
> java MyFirstJavaApp.java
이 프로그램은 이름을 물어보고, 그다음 다음과 같이 출력해야 해요.
Hello world!
What is your name? Mary
Hello Mary
축하합니다. 이제 복잡한 애플리케이션을 만들 준비가 됐어요!
흔한 문제와 해결 방법
컴파일러 문제
Microsoft Windows 시스템에서의 흔한 오류 메시지
javac is not recognized as an internal or external command, operable program or batch file
이 오류가 발생하면, Windows가 컴파일러인 javac를 찾을 수 없다는 뜻이에요.
Windows에 javac가 어디 있는지 알려주는 방법 중 하나는 다음과 같아요. JDK를 C:\jdk26에 설치했다고 가정해볼게요. 프롬프트에서 다음 명령을 입력하고 Enter를 누르면 돼요.
C:\jdk26\bin\javac HelloWorldApp.java
이 옵션을 선택하면 프로그램을 컴파일하거나 실행할 때마다 javac와 java 명령 앞에 C:\jdk26\bin\을 붙여야 해요. 이런 번거로운 타이핑을 피하려면 이 정보를 PATH 변수에 추가하면 돼요. 자세한 내용은 이 페이지의 Setting up a Java Development Kit 섹션을 참고하세요.
Class names, HelloWorldApp, are only accepted if annotation processing is explicitly requested
이 오류가 발생하면, 프로그램을 컴파일할 때 .java 접미사를 빼먹은 것이에요. 명령은 javac HelloWorldApp.java이지 javac HelloWorldApp이 아니라는 걸 기억하세요.
UNIX 시스템에서의 흔한 오류 메시지
javac: Command not found
이 오류가 발생하면, UNIX가 컴파일러인 javac를 찾을 수 없다는 뜻이에요.
UNIX에 javac가 어디 있는지 알려주는 방법 중 하나는 다음과 같아요. JDK를 /usr/local/jdk26에 설치했다고 가정해볼게요. 프롬프트에서 다음 명령을 입력하고 Return을 누르면 돼요.
/usr/local/jdk26/javac HelloWorldApp.java
참고: 이 옵션을 선택하면 프로그램을 컴파일하거나 실행할 때마다 javac와 java 명령 앞에 /usr/local/jdk26/을 붙여야 해요. 이런 번거로운 타이핑을 피하려면 이 정보를 PATH 변수에 추가하면 돼요. 자세한 내용은 이 페이지의 Setting up a Java Development Kit 섹션을 참고하세요.
Class names, 'HelloWorldApp', are only accepted if annotation processing is explicitly requested
이 오류가 발생하면, 프로그램을 컴파일할 때 .java 접미사를 빼먹은 것이에요. 명령은 javac HelloWorldApp.java이지 javac HelloWorldApp이 아니라는 걸 기억하세요.
구문 오류(모든 플랫폼)
프로그램의 일부를 잘못 입력하면 컴파일러가 구문 오류를 낼 수 있어요. 메시지는 보통 오류의 종류, 오류가 감지된 줄 번호, 그 줄의 코드, 그리고 코드 내 오류 위치를 표시해요. 다음은 문장 끝의 세미콜론(;)을 빠뜨려서 발생한 오류예요.
Testing.java:8: error: ';' expected
count++
^
1 error
컴파일러 오류가 보이면 프로그램이 성공적으로 컴파일되지 않은 것이고, 컴파일러가 .class 파일을 만들지 못한 것이에요. 프로그램을 꼼꼼히 확인하고 발견한 오류를 고친 뒤 다시 시도해보세요.
의미 오류(Semantic Errors)
컴파일러는 프로그램이 구문상 올바른지 확인하는 것 외에도, 다른 기본적인 정확성도 검사해요. 예를 들어, 컴파일러는 초기화되지 않은 변수를 사용할 때마다 경고해줘요.
Testing.java:8: error: variable count might not have been initialized
count++;
^
Testing.java:9: error: variable count might not have been initialized
IO.println("Input has " + count + " chars.");
^
2 errors
이 경우에도 프로그램은 성공적으로 컴파일되지 않았고, 컴파일러는 .class 파일을 만들지 못했어요. 오류를 고치고 다시 시도하세요.
실행 시 문제
Microsoft Windows 시스템에서의 오류 메시지
이 오류가 발생하면, java가 바이트 코드 파일인 HelloWorldApp.class를 찾을 수 없다는 뜻이에요.
java가 .class 파일을 찾으려 시도하는 위치 중 하나가 현재 디렉터리예요. 그래서 .class 파일이 C:\java에 있다면, 현재 디렉터리를 그곳으로 변경해야 해요. 디렉터리를 변경하려면 프롬프트에서 다음 명령을 입력하고 Enter를 누르세요.
cd c:\java
프롬프트가 C:\java>로 바뀌어야 해요. 프롬프트에서 dir을 입력하면 .java와 .class 파일이 보여야 해요. 이제 java HelloWorldApp을 다시 입력하세요.
여전히 문제가 있다면 CLASSPATH 변수를 변경해야 할 수도 있어요. 이것이 필요한지 확인하려면 다음 명령으로 클래스패스를 초기화해보세요.
set CLASSPATH=
이제 java HelloWorldApp을 다시 입력하세요. 프로그램이 이제 작동한다면 CLASSPATH 변수를 변경해야 해요. 이 변수를 설정하려면 JDK 설치 안내의 Updating the PATH variable 섹션을 참고하세요. CLASSPATH 변수도 같은 방식으로 설정해요.
Could not find or load main class HelloWorldApp.class
초보 프로그래머들이 자주 저지르는 실수는, 컴파일러가 만든 .class 파일에 java 런처를 직접 실행하려고 하는 것이에요. 예를 들어 java HelloWorldApp 대신 java HelloWorldApp.class로 프로그램을 실행하려 하면 이런 오류가 나요. 기억하세요. 인자는 사용하려는 클래스의 이름이지 파일 이름이 아니에요.
Exception in thread "main" java.lang.NoSuchMethodError: main
Java VM은 실행할 클래스에 애플리케이션 실행을 시작할 main 메서드가 있어야 해요. Making Your Program Interactive 섹션에서 main 메서드에 대해 자세히 다루고 있어요.
UNIX 시스템에서의 오류 메시지
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp
이 오류가 발생하면, java가 바이트 코드 파일인 HelloWorldApp.class를 찾을 수 없다는 뜻이에요.
java가 바이트 코드 파일을 찾으려 시도하는 위치 중 하나가 현재 디렉터리예요. 예를 들어 바이트 코드 파일이 /home/jdoe/java에 있다면, 현재 디렉터리를 그곳으로 변경해야 해요. 디렉터리를 변경하려면 프롬프트에서 다음 명령을 입력하고 Return을 누르세요.
cd /home/jdoe/java
프롬프트에서 pwd를 입력하면 /home/jdoe/java가 보여야 해요. ls를 입력하면 .java와 .class 파일이 보여야 해요. 이제 java HelloWorldApp을 다시 입력하세요.
여전히 문제가 있다면 CLASSPATH 환경 변수를 변경해야 할 수도 있어요. 이것이 필요한지 확인하려면 다음 명령으로 클래스패스를 초기화해보세요.
unset CLASSPATH
이제 java HelloWorldApp을 다시 입력하세요. 프로그램이 이제 작동한다면 위의 PATH 변수와 같은 방식으로 CLASSPATH 변수를 변경해야 해요.
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorldApp/class
초보 프로그래머들이 자주 저지르는 실수는, 컴파일러가 만든 .class 파일에 java 런처를 직접 실행하려고 하는 것이에요. 예를 들어 java HelloWorldApp 대신 java HelloWorldApp.class로 프로그램을 실행하려 하면 이런 오류가 나요. 기억하세요. 인자는 사용하려는 클래스의 이름이지 파일 이름이 아니에요.
Exception in thread "main" java.lang.NoSuchMethodError: main
Java VM은 실행할 클래스에 애플리케이션 실행을 시작할 main 메서드가 있어야 해요. Making Your Program Interactive 섹션에서 main 메서드에 대해 자세히 다루고 있어요.
한 걸음 더 나아가기(Going Further)
이 첫 Java 프로그램은, 모든 Java 개발자가 애플리케이션을 실행하기 위해 따르는 기본 단계들을 보여줬어요.
.java텍스트 파일 집합에 소스를 만든다- 이 파일들을 컴파일해서 대응하는
.class바이너리 파일 집합을 만든다 - 그것들을 하나의 애플리케이션으로 함께 실행한다
대규모 애플리케이션을 개발하는 개발자들은 소스 코드를 관리하기 위해 일반 텍스트 에디터를 쓰지 않아요. 대신 **통합 개발 환경(IDE, Integrated Development Environment)**을 사용해요. IDE는 소프트웨어 개발에 특화된 복잡한 소프트웨어 애플리케이션이에요. IDE는 소스 코드의 컴파일을 자동으로 처리하고, Java 코드의 구문 오류를 추적하고, 실행 중 발생하는 버그를 잡아내는 데도 도움을 줘요.
이런 도구 중 일부는 오픈소스이며 무료로 사용할 수 있어요.
- Eclipse 재단이 유지 관리하는 Eclipse
- Apache 재단이 유지 관리하는 NetBeans
- JetBrains에서 출시하는 IntelliJ IDEA Community Edition은 개인 및 상업 개발 모두 무료로 사용할 수 있어요.
더 알아보기 (Learn more)
- JDK 다운로드 페이지 — 항상 최신 JDK 버전을 확인할 수 있는 곳
- javac 매뉴얼 — Java 컴파일러 사용법
- 이 튜토리얼에서 만든 프로그램의 실행 방식이 궁금하다면 Launching Simple Source-Code Programs 문서도 함께 읽어보세요.