2022-05-01 터미널에서 java 작성, 컴파일, 실행하기

 java를 잠깐 사용할 일이 생겼다.

2학년 java 강의에선 당연히 이클립스를 사용했다.

하지만 짧게 사용하는데 이클립스를 설치하기는 싫었다.

그래서 vim과 터미널을 이용해서 java를 컴파일하고 실행하는 방법을 찾아보았다.


Java Compiler, Java Virtual Machine

java는 기계 중립적이다.

자바 바이트코드는 플랫폼에 독립적이다.

모든 자바 가상 머신은 자바 가상 머신 규격에 정의된 대로 자바 바이트코드를 실행한다.

따라서 표준 자바 API까지 동일한 동작을 하도록 구현한 상태에서는 이론적으로 모든 자바 프로그램은 CPU나 운영 체제의 종류와 무관하게 동일하게 동작할 것을 보장한다.

출처 :  https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EA%B0%80%EC%83%81_%EB%A8%B8%EC%8B%A0


java 컴파일하고 실행하기

1. java 코드를 작성하고 저장한다. 확장자는 .java다.

vim hello.java
Code language: CSS (css)

2. java compiler로 컴파일한다. 

javac hello.java
Code language: CSS (css)

컴파일이 완료되면 .class 확장자의 자바 바이트 코드 파일이 생성된다. 

3. 바이트 코드(.class)를 JVM(자바 가상 머신)에 전달하고 실행한다.

java hello

이때 확장자 .class는 입력하지 않는다.

4. 빠밤! 끝!


23.09.07 추가

macOS jdk 버전 변경하기

//1. JDK 버전 확인
java --version

//2. 설치되어 있는 Java Virtual Machines 목록을 확인
/usr/libexec/java_home -V

//3. macOS에서 JDK 위치
cd /Library/Java/JavaVirtualMachines/

//4. JDK 버전 변경
vim ~/.zshrc // 또는 vim ~/.bash_profile
//다음으로 수정 (없으면 추가)
export JAVA_HOME=$(/usr/libexec/java_home -v 11)  //11버전 선택

//5. 변경 사항 적용
source ~/.zshrc
//또는
source ~/.bash_profile
//또는
//터미널 재부팅
Code language: PHP (php)

23.09.08 추가

패키지

package 컴파일 및 실행하기

❯ pwd
/Users/user/Desktop/Study_JavaSpring/project/calc_2/src/calc_1
❯ ll
total 56
drwxr-xr-x  9 user  staff  288  9  7 20:11 .
drwxr-xr-x  4 user  staff  128  9  7 20:11 ..
-rw-r--r--  1 user  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--  1 user  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--  1 user  staff  163  9  7 20:11 CalMul.java
-rw-r--r--  1 user  staff  164  9  7 20:11 CalSub.java
-rw-r--r--  1 user  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--  1 user  staff  350  9  8 13:13 MainClass.java
-rw-r--r--  1 user  staff  211  9  8 13:13 MyCalculator.java

이렇게 생겨먹은 디렉터리 구조에서 /Users/user/Desktop/Study_JavaSpring/project/calc_2/src/calc_1 아래에 있는 *.java 파일들은 모두 하나의 패키지다.

이들을 패키지 째로 컴파일하고 실행하는 법.

❯ pwd
/Users/user/Desktop/Study_JavaSpring/project/calc_2/src/calc_1
❯ ll
total 56
drwxr-xr-x  9 user  staff  288  9  7 20:11 .
drwxr-xr-x  4 user  staff  128  9  7 20:11 ..
-rw-r--r--  1 user  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--  1 user  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--  1 user  staff  163  9  7 20:11 CalMul.java
-rw-r--r--  1 user  staff  164  9  7 20:11 CalSub.java
-rw-r--r--  1 user  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--  1 user  staff  350  9  8 13:13 MainClass.java
-rw-r--r--  1 user  staff  211  9  8 13:13 MyCalculator.java
❯ pwd
/Users/user/Desktop/Study_JavaSpring/project/calc_2/src/calc_1
❯ javac -d . ./*
❯ ll
total 56
drwxr-xr-x  10 user  staff  320  9  8 14:25 .
drwxr-xr-x   4 user  staff  128  9  7 20:11 ..
-rw-r--r--   1 user  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--   1 user  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--   1 user  staff  163  9  7 20:11 CalMul.java
-rw-r--r--   1 user  staff  164  9  7 20:11 CalSub.java
-rw-r--r--   1 user  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--   1 user  staff  350  9  8 13:13 MainClass.java
-rw-r--r--   1 user  staff  211  9  8 13:13 MyCalculator.java
drwxr-xr-x   9 user  staff  288  9  8 14:25 calc_1
❯ ll calc_1
total 56
drwxr-xr-x   9 user  staff  288  9  8 14:25 .
drwxr-xr-x  10 user  staff  320  9  8 14:25 ..
-rw-r--r--   1 user  staff  283  9  8 14:25 CalAdd.class
-rw-r--r--   1 user  staff  318  9  8 14:25 CalDiv.class
-rw-r--r--   1 user  staff  283  9  8 14:25 CalMul.class
-rw-r--r--   1 user  staff  283  9  8 14:25 CalSub.class
-rw-r--r--   1 user  staff  140  9  8 14:25 ICalculator.class
-rw-r--r--   1 user  staff  530  9  8 14:25 MainClass.class
-rw-r--r--   1 user  staff  941  9  8 14:25 MyCalculator.class
  • javac -d [target directory] [src file]

❯ javac ./*
❯ ll
total 112
drwxr-xr-x  16 user  staff  512  9  8 14:28 .
drwxr-xr-x   4 user  staff  128  9  7 20:11 ..
-rw-r--r--   1 user  staff  283  9  8 14:28 CalAdd.class
-rw-r--r--   1 user  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--   1 user  staff  318  9  8 14:28 CalDiv.class
-rw-r--r--   1 user  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--   1 user  staff  283  9  8 14:28 CalMul.class
-rw-r--r--   1 user  staff  163  9  7 20:11 CalMul.java
-rw-r--r--   1 user  staff  283  9  8 14:28 CalSub.class
-rw-r--r--   1 user  staff  164  9  7 20:11 CalSub.java
-rw-r--r--   1 user  staff  140  9  8 14:28 ICalculator.class
-rw-r--r--   1 user  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--   1 user  staff  530  9  8 14:28 MainClass.class
-rw-r--r--   1 user  staff  350  9  8 13:13 MainClass.java
-rw-r--r--   1 user  staff  941  9  8 14:28 MyCalculator.class
-rw-r--r--   1 user  staff  211  9  8 13:13 MyCalculator.java
  • -d 옵션을 사용하지 않으면 이렇게 됨. .class와 .java가 섞임.

ll
total 56
drwxr-xr-x  10 user  staff  320  9  8 14:25 .
drwxr-xr-x   4 user  staff  128  9  7 20:11 ..
-rw-r--r--   1 user  staff  165  9  7 20:11 CalAdd.java
-rw-r--r--   1 user  staff  186  9  7 20:11 CalDiv.java
-rw-r--r--   1 user  staff  163  9  7 20:11 CalMul.java
-rw-r--r--   1 user  staff  164  9  7 20:11 CalSub.java
-rw-r--r--   1 user  staff  103  9  7 20:11 ICalculator.java
-rw-r--r--   1 user  staff  350  9  8 13:13 MainClass.java
-rw-r--r--   1 user  staff  211  9  8 13:13 MyCalculator.java
drwxr-xr-x   9 user  staff  288  9  8 14:25 calc_1java calc_1.MainClass
result : 15
result : 5
result : 50
result : 2
Code language: CSS (css)
  • java [package].[main class]


클래스 패스

2024년 1월 1일 추가

클래스 패스 – 생활코딩

동작하는데 필요한 .class 파일의 위치를 전달하는 법.


댓글 남기기