오늘부터 자바를 공부하고 있습니다. 신체검사에 문제가 없으면 1월부터 KTDS 신입사원 교육에 들어가는데요, 거의 자바 관련 교육이 많더라구요. 저는 자바의 J 자도 모르기 때문에 교육 들어가기 전에 미리 공부를 하려고 합니다. 게다가 실무 가서도 거의 자바를 다루는 것 같더군요. 따라서 앞으로 자바만 열심히 팔 생각입니다. 자바 선배님들 계시다면 공부에 관해 조언해주시면 감사하겠습니다.

우선 제가 자바에 입문하기 위해 선택한 책은 Head First Java입니다. 대충 검색해보니 좋다고 추천하시는 분들이 많더군요. 사실 구입은 지난번에 했지만 공부 시작은 계속 미루고 있었습니다. 그러다 오늘부터 시작을 했는데 초반부터 막혀서 고생을 좀 했습니다.

43 페이지에 있는 예제를 java로 저장해서 컴파일 하는데는 문제가 없었는데, 실행을 하니 오류가 나더군요.

public class MyFirstApp {
     public static void main (String[] args) {
          System.out.println("I Rule!");
          System.out.println("The World");
     }
}

오류 내용은

Exception in thread "main" java.lang.NoClassDefFoundError: MyFirstApp/class

구글링 해보니 해결책은 금방 찾을 수 있었습니다. 실행할 때 뒤에 .class를 붙이면 안 되더군요. ㅠㅠ
아무튼 자바의 J 자도 모르는 완전 초짜라서 초반부터 이렇게 삽질을 했습니다.




그런데 한가지 불편한 점이 생겼습니다. 컴파일 할 때 커맨드 창을 띄운 다음 javac class.java 를 수동으로 타이핑 하는게 너무 귀찮더군요. 마찬가지로 class 파일의 실행 결과를 보려고 java class 입력하는 것도 너무 귀찮았습니다. 그래서 머리를 굴려 마우스 우클릭으로 해결하기로 마음먹었습니다. 지난번에 제가 VHD 마운트 때문에 한번 만들어본 경험이 있어서 이건 수월하게 만들 수 있었습니다.

우선 java 파일을 class로 컴파일 하는 작업을 마우스 우클릭으로 하시려면 아래 예제처럼 REG 파일을 만들어 등록해주시면 됩니다. 그러면 확장자 java 파일에 우클릭 했을 때 Compile 메뉴가 등장합니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.java]
@="Compile"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Compile\shell\Compile]
@="Compile"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Compile\shell\Compile\command]
@="C:\\Program Files\\Java\\jdk1.6.0_21\\bin\\javac.exe \"%1\""


파란색 부분만 주의하시면 됩니다. javac.exe의 경로를 적어주셔야 하는데 폴더 구분은 역슬러시 2개가 들어갑니다. 각자 자바 버전에 따라 경로는 다를 것이기 때문에 이렇게 수동으로 설명을 드립니다.




다음은 class 파일을 실행하는 부분인데요, 여기에는 2가지 작업이 필요합니다. 왜냐하면...

일단 위에서 말씀드렸듯이 실행할 때 확장자 .class가 들어가면 오류가 발생합니다. 그런데 파일명을 %1으로 받아주면 전체 경로와 확장자까지 받아주게 됩니다. 따라서 CMD 파일을 따로 하나 만들어 %1 대신에 %~n1로 확장해줘야 합니다. 레지에는 %~n1을 적어주니 문자 그대로 받아들이더군요.

또 다른 이유는 설령 실행이 된다 하더라도 실행만 되고 바로 창이 꺼져버리기 때문에 출력 결과를 확인할 수 없습니다. 따라서 저는 CMD 파일 마지막에 pause를 한번 걸어줍니다.

우선 아래 예제를 CMD 파일로 저장한 다음 환경변수 PATH에 등록된 아무 위치에나 두세요. 저는 C:\Windows 경로가 편하기 때문에 거기에 복사해둘 생각입니다.

@echo off
"C:\Program Files\Java\jdk1.6.0_21\bin\java.exe" "%~n1"
pause
exit


이것도 마찬가지로 파란색 부분에 java.exe 파일 경로만 잘 적어주시면 됩니다. 물론 CMD 파일의 경우 레지스트리랑 달리 위 경로가 환경변수 PATH에 등록되어 있는 분들이라면 그냥 전체 경로를 적지 말고 java.exe만 적어주셔도 됩니다.

위 내용물을 예를 들어 C:\Windows 위치에 javarun.cmd 파일로 저장했다면, 레지스트리 등록은 아래 예제처럼 해주시면 되겠습니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.class]
@="javarun"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\javarun\shell\javarun]
@="Run"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\javarun\shell\javarun\command]
@="C:\\Windows\\javarun.cmd \"%1\""


이것도 마찬가지로 파란색 부분만 주의해주시면 됩니다. 저는 javarun.cmd 파일을 만들어 C:\Windows 위치에 복사를 해뒀기 때문에 저렇게 적어줬습니다. 역시 폴더 구분은 역슬러쉬 2개씩을 입력합니다.

작업이 잘 되었다면 아래 그림처럼 class 파일에 우클릭 했을 때 Run 메뉴가 등장할 것입니다.



실행 결과 출력이 잘 되었습니다.




별로 중요하지 않은 내용이지만, 혹시라도 저처럼 자바 공부를 이제 막 시작하시는 분들이 짧은 예제 파일을 만들어 놓고 컴파일, 실행하는 과정이 귀찮게 느껴지셨다면 도움이 될까 싶어 올려드렸습니다. 자바랑 관련이 없는 분들이라면 윈도우 레지스트리를 저렇게 활용할 수 있다는 정도만 알아두시면 될 것 같습니다.


※ 글 올리자마자 트위터로 이클립스에 대해 말씀해주신 분이 계셨습니다. 그러니까 위 방법은 결국 삽질입니다만... 윈도우 레지스트리 우클릭 메뉴에 대해 공부했다고 생각해주세요. ^^