Programming/Java

JAVA :: java파일과 class파일 폴더 구분하기

WANJIN 2017. 5. 1. 14:15
반응형

java 파일과 class 파일 구분하여 관리하기


왜 구분해야 하지?

source code 파일(.java)과 byte code 파일(.class)이 한 폴더에 함께 있는 것은 바람직하지 못하다.
배포할 때에는 실행파일인 바이트코드 파일, 즉 class파일만 배포하는데 여기에 소스코드 파일인 java 파일이 섞여 있으면 관리하기가 불편하기 때문이다.

따라서 두 종류의 파일을 서로 다른 폴더로 분리시켜야 한다.


어떻게 구분하지?

구분하는 방법은 쉽다.
class파일은 컴파일이 완료되면 생성된다. 
그 말은 컴파일 할 때 옵션을 줘서 어느폴더에 저장될지 지정해주면 된다는 말씀이다.

폴더를 지정해주기 전에, 그 폴더를 만들어줘야 한다.
있지도 않은 폴더에 무언가를 담을 수는 없으니까.

보통은. 일반적으로는. 대부분은.
소스코드(자바 파일)는 source의 약자로 'src'라는 이름으로, 클래스 파일은 binary의 약자로 'bin'이라는 이름으로 폴더를 지정해준다.
(이걸 몰랐을 때는 '통' 이라는 의미로 bin을 사용하는줄 알았다능ㅋㅋㅋㅋ)


폴더 지정 옵션으로 컴파일하는 방법

=> javac -d bin src/파일명.java

이렇게 하면 bin이라는 폴더 안에 src폴더 안에 있는 자바 파일을 컴파일한 클래스 파일이 생성된다.

참고로 'javac'라는 명령어는 컴파일 명령어다. 
위의 명령어를 풀이하면 다음과 같다.

'bin 폴더 안에다가 컴파일한 결과물을 둘거야. (그 결과물은 .class파일)
글탐 뭐를 컴파일 할거냐하면, src폴더 밑에 있는 파일명.java파일 있지? 
그거를 컴파일 할거야.'
라는 뜻이다.

이렇게 클래스파일과 자바파일 폴더가 구분되어 있으니 실행할 때에도 어느 폴더 안에 있는 클래스파일을 실행할건지 알려줘야 한다.

폴더 지정 옵션으로 실행하는 방법

=> java -classpath bin 파일명

=> java -cp bin 파일명

(두가지 모두 똑같음)


이걸 해석하면
'클래스 파일을 하나 실행할거야.
근데 뭘 실행할거냐면, bin폴더 밑에 있는 그 파일 있지?
고 놈을 실행할거야.'
라는 말이다.


<Java 컴파일/실행 시 폴더지정 옵션 정리>

* -d 옵션: 컴파일한 결과물(클래스파일)을 어디에 둘지 폴더를 지정한다.
                (해당 폴더가 실제로 있어야 함)
                javac -d 폴더명 파일명.java

* -cp 옵션: 클래스파일을 읽을 때(실행할 때) 해당 파일이 어디에있는지 위치를 지정한다.
                 java -cp 폴더명 파일명

 

-----------------------------------

이클립스와 같은 개발 툴을 이용한다면, 명령창에 javac 명령어로 컴파일하고, java 명령어로 실행하는 그 자체가 낯설테지만...

요정도는 기본 배경 날리지로 좀 알아두는 것도 나쁘지 않겠다.



반응형