예지의 테크 로그포스 (Yeji's Tech Log Force)
Java 환경 변수 설정(하는 이유, 과정 분석!) 본문
프로그래밍 언어 사용하려고 할 때(JDK설치 등), 뭔 경로 설정같은 걸 하게 된다.
근데 이게 대체 뭔지, 왜 하는지도 모르고 따라만 하면...
개발자가 아니라 사용자라고...(지난날의 나^_^...)
그래서 이번에는 PATH 설정을 하는 이유, 그 과정을 뜯어서 고민해봤다! (JAVA 기준)
1. 환경 변수 설정. 왜 함?
차근차근 따라가보자. 우선 JDK를 설치했다.
JDK는 컴파일을 하는javac.exe(개발환경을 제공)와
프로그램을 실행 하는 java.exe(실행환경 제공)를 포함하고 있다.
Q. 그럼 eclipse같은 IDE 없어도 이미 개발과 실행은 가능하겠네?!
A. 당근. 콘솔에서 javac로 컴파일 한 후, java로 실행까지 할 수 있음
ㅇㅋ 그럼 컴파일러 불러보자.
javac 입력.
그냥 될 리가 없음.
컴퓨터: javac가 어디 있는데?? 나 모름..그니까 실행 못함..
나는 javac.exe가 어느 위치에 있는지 안다.
C:\Program Files\Java\jdk1.8.0_181 의 bin 폴더 내부이다.
근데 컴퓨터는 모른다. 알려준 적 없거든ㅎ
그러니까 실행을 하고 싶다면, 직접 디렉토리까지 이동한 후에야
컴퓨터: 아~ 여기 있네 javac~
Path환경 변수 설정을 해주고 나면, 컴퓨터는 javac가 어디 있는지 알게 된다.
그럼 어느 위치에서든 javac를 실행할 수 있다.
컴퓨터가 javac.exe, java.exe 어디 있는지 아니까.
2. JAVA_HOME
그럼 javac.exe가 있는 경로를 Path로 등록해주면
알아서 잘 찾아가겠네?
근데 잠깐....
C:\Program Files\Java\jdk1.8.0_181 너~~~무 길다.
그니까 JAVA_HOME으로 alias해주자.(별명 붙여서 부르자)
그럼 이제 C:\Program Files\Java\jdk1.8.0_181 이렇게 길게 써줄 필요 없다.
JAVA_HOME 쓰면 된다.
보시다시피 JAVA_HOME을 echo시켰더니
C:\Program Files\Java\jdk1.8.0_181 를 돌려주는 것을 잘 확인할 수 있다!
즉, 이제 JDK위치는 JAVA_HOME이라고도 할 수 있는 것이다.
3. Path변수 설정해주기
이제 진짜로 Path환경 변수에 JAVA_HOME을 등록 해서,
컴퓨터가 어디서든지 java.exe, javac.exe 등을 잘 찾아가서 실행할 수 있도록 해주자.
내PC 우클릭->속성->고급시스템설정에서 환경변수를 설정할 수 있다.
Path가 있다.
컴퓨터는 Path 목록의 값(경로)들은 알고 있다는 것이므로,
어디서든 이 경로를 알아서 찾아갈 수 있다.
그럼 여기에 JAVA_HOME\bin을 등록해준다면
컴퓨터는 어느 폴더에서든지 JAVA_HOME\bin를 찾아가서
JDK의 javac.exe, java.exe 등을 실행할 수 있는 것이다!
Path를 더블 클릭해서 환경 변수 편집을한다.
맨 아래에 보이듯이, %JAVA_HOME%\bin을 등록해주었다
.
+ 다시 한 번 말하지만, JAVA_HOME은 C:\Program Files\Java\jdk1.8.0_181 을 Alias한 거다.
즉, C:\Program Files\Java\jdk1.8.0_181\bin을 등록해줘도 상관없다. 당신 맘대로!
=> 근데 개발자 어른들이 여러 이유로 Alias해주는 게 정신 건강에 좋다고 한다ㅎㅎ..다음에 더 정리해보겠다.
자자 아무튼 이제 진짜로 bin까지 찾아가지 않아도, javac.exe등을 실행하는지 확인해보자.
먼저 work라는 폴더에 Hello.java를 작성했다.
javac Hello.java를 입력해서 컴파일을 했다. 보다시피 에러 없이 잘 된다.
이제 java Hello를 입력해서 실행까지 해보자. 이것도 당연히 잘 실행된다.
+ 과정 상세 설명)
.java소스코드를 .class 바이트코드로 컴파일한다. -> javac Hello.java
Hello.class바이트코드를 java실행파일을 이용해 실행한다. -> java Hello (.class는 붙이지 않는다. '.'은 자바에서 경로 구분하는 거라서 Hello밑에 class라고 알아먹는다.)
'Java' 카테고리의 다른 글
Java 모든 Class는 Object Class를 상속 받는다(feat. 오버라이딩) (0) | 2024.01.19 |
---|---|
Garbage collection을 고려한 코드 작성 (1) | 2024.01.19 |
static 메서드 호출 시 주의점 (0) | 2024.01.19 |
Java에는 다차원배열이 없다?!! (배열의 배열, 다중 배열) (2) | 2024.01.12 |
Java는 플랫폼 독립적이다? (1) | 2024.01.11 |