[부스트코스/쉽게 배우는 자바 1] 12. 이클립스 없이 직접 컴파일하고 실행해보기

zzzzsb·2021년 2월 27일
0

부스트코스 쉽게 배우는 자바 1


Chaper 12


12-1. 직접 컴파일-실행 - 소개

이클립스 없이 컴파일하기


이클립스는 자바로 프로그램을 만들때 유용한 도구이다.
하지만 이클립스 없이 자바로 프로그램을 만드려면 어떻게 해야할까?

이클립스 없이 자바로 프로그래밍을 하려면 우선 자바 파일을 스스로 컴파일 할 수 있어야 한다.
그리고 컴파일한 클래스 파일을 앞으로의 실행하는 과정을 거쳐야 한다.


12-2. 직접 컴파일-실행 - 실행환경 살펴보기

직접 컴파일을 하기 위해서는 자바의 설치 경로를 알고 있어야 한다.

MacOS에서 터미널 열기

  • 스포트라이트에서 terminal을 입력하면 터미널이 실행된다.

javac 확인

  • 터미널에 javac를 입력한 후 실행하면 javac 명령어의 사용 방법이 출력된다.

MacOS에서 javac 명령어의 경로 확인하기

  • pwd(Print Working Directory) 명령어로 현재 경로를 확인한다.

  • /usr/libexec/java_home를 입력하여 자바의 설치 경로를 확인한다.
  • 터미널에 자바의 설치 경로가 출력됨을 확인할 수 있다.

  • cd(Change Directory) 명령어로 자바의 설치 경로로 이동한다.

  • 필자의 경우 자바 설치경로에 공백이 존재(Internet Plug-Ins)하여 ""로 이스케이프 처리를 해주었다.

  • pwd 명령어로 이동이 되었는지 확인 가능하다.

  • ls(list segments) 명령어로 현재 경로에 있는 파일들의 목록을 확인한다.

  • 그중 bin 폴더로 이동한다.

  • ls 명령어로 파일 목록을 확인하면 java와 javac가 있는 것을 확인할 수 있다고 하는데, 필자는 java만 보였다.

  • 뭔가 이상하다......

🧐 MacOS에서 자바 경로 찾기

뭔가 잘못된것 같아 확인해보니, /usr/libexec/java_home을 터미널에 입력했을때 나오는 자바 설치경로가 이상한 것 같았다. 구글링을 하자..!

  • cd /Library/Java/JavaVirtualMachines/ 명령어를 이용하여 JavaVirtualMachines 디렉토리로 이동한다.

  • cd 명령어는 Change Directory 의 약자로 디렉토리를 변경해주는 명령어이다.

  • pwd로 정상적으로 맞게 디렉토리가 변경 되었는지 확인한다.

  • ls 명령어로 현재 디렉토리에 있는 파일을 확인하면 설치한 JDK 파일이 위치한 것을 볼 수 있다.

  • ls 명령어는 List Segement 의 약자로 현재 자신이 위치한 디렉토리에 있는 전체 파일 목록을 출력해주는 명령어이다.

  • JDK의 위치를 찾고 ls로 파일을 확인하며 강의와 비교해보니, cd /Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home 을 입력해야 강의처럼 javac가 나왔다.

  • cd로 디렉토리를 변경한후 ls 로 확인하고, cd bin을 입력해 bin 디렉토리로 이동하여 다시 ls로 파일을 확인하면 드디어! javac를 발견할 수 있다!

환경 변수 경로 확인

터미널에서 javac만 입력해도 실행결과가 나오는 것은 javac의 경로를 운영체제가 이미 알고 있기 때문이다.
이는 환경 변수에 javac의 경로가 이미 입력되어 있기 때문이다.

MacOS / Linux 에서 환경 변수 설정하기

  • 터미널에 echo $PATH를 입력하면 환경 변수의 Path 정보를 확인할 수 있다.

만약 javac의 경로가 포함되어 있지 않다면 터미널에서 명령어를 입력해 환경 변수에 추가할 수 있다.

  • 터미널에 nano ~/.bash_profile 명령어를 입력한다.
  • ~은 자신의 홈디렉토리를 나타낸다.

  • 편집기가 열리면 export PATH=$PATH:/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home/bin를 입력하면 된다.

  • 하지만 기본적으로 설정 되어있기 때문에 입력할 필요는 없다. 위의 설명은 그냥 이론적인 것!


12-3. 직접 컴파일-실행 - 컴파일과 실행하기

javac 명령어를 사용하기 위해서는 javac의 경로가 환경 변수에 포함되어 있어야 한다.
이번에는 터미널에서 javac 명령어로 자바 파일을 직접 컴파일해 보자.

프로젝트 디렉토리로 이동하기

MacOS(Linux)

  • 파인더에서 프로젝트 디렉토리에 들어간 뒤 하단에서 경로를 복사한다.

  • cd /Users/jisubin/Desktop/java1/Programming 를 통해 복사한 프로젝트 디렉토리로 이동한다.
  • ls 명령어로 프로젝트 디렉토리 내부의 구조를 확인할 수 있다.

자바 파일 컴파일하기

  • 터미널에 javac Program.java 를 입력해 Program.java 를 컴파일한다.
  • javac 명령어는 클래스 파일을 만드는 명령어이다.
  • ls 명령어로 내부를 확인해보면 Program.class 가 생성된 것을 확인할 수 있다.(기존에 있던 클래스 파일을 지우고 실행해보면 확인가능함)

실행하기

  • 터미널에 java Program 을 입력하면 컴파일된 클래스 파일이 실행된다.
  • java 명령어는 컴파일된 파일을 가상 머신에서 실행하는 작업을 한다.

  • cat Program.java 명령어로 자바파일의 내용을 확인할 수 있다.

12-4. 직접 컴파일-실행 - 라이브러리이용

라이브러리를 이용하는 프로그램을 컴파일 하기

외부 라이브러리 객체들을 사용하는 프로그램을 직접 컴파일 해보자.

  • OkJavaGoInHome.java 파일은 import 구문 을 통해 org.opentutorials.iot의 클래스들을 불러들이고 있다.

  • 그렇기 때문에 OkJavaGoInHome.java 파일의 컴파일을 실행할 때 자동적으로 org.opentutorials.iot의 Elevator, Lighting, Security 클래스들도 컴파일을 한다.

  • OkJavaGoInHome.java 파일을 컴파일 하였다.

  • 만약, lib 폴더를 새로 만들어 org 폴더를 그 안으로 이동 시킨 후 컴파일을 해보자.

  • org 폴더가 OkJavaGoInHome.java 파일과 같은 디렉토리에 있지 않기 때문에 에러가 발생함을 알 수 있다.

외부 라이브러리도 포함해서 컴파일하기

외부 라이브러리를 포함해 컴파일 하기 위해서는 javac 명령어의 옵션 중 --class-path(-cp) 옵션을 이용하여 외부 라이브러리도 함께 지정해야 한다.

  • javac -cp ".:lib" OkJavaGoInHome.java 명령어를 입력하여 컴파일한다.

  • 콜론(:)구분자 의 의미를 갖는다.

  • --class-path 옵션은 -cp로 줄여서 표현할 수 있다.

  • -cp ".:lib"은 자바 파일이 있는 현재 폴더(.)와 lib 폴더에서 필요한 자바 파일들을 컴파일하라는 의미이다.

외부 라이브러리도 포함해서 실행하기

  • 컴파일 할때와 같이 --class-path(-cp) 옵션에 외부 라이브러리를 옵션에 포함하여 실행해야 한다.
  • java -cp ".:lib" OkJavaGoInHome 으로 실행한다.

12-5. 직접 컴파일-실행 - 입력과 출력

지난 시간과 달리 org 폴더를 다시 lib 밖으로 꺼낸다.

  • OkJavaGoInHomeInput.java를 컴파일하고 실행했더니 에러가 발생한다.

  • id 변수와 bright 변수는 args 파라미터를 통해 값을 받고 있기 때문이다.

실행할 때 아규먼트 입력하기

이클립스에서 Run Configuration 의 Argument 탭에서 아규먼트를 입력해 실행했었지만, 터미널에서 아규먼트는 어떻게 주어야 할까?

  • 실행할 클래스 파일 다음에 아규먼트를 연달아 입력해주면 된다.
  • java OkJavaGoInHomeInput "JAVA APT 507" 15.0
  • 이때 아규먼트는 ""(큰따옴표) 안에 넣어주어야 한다.
  • 두번째 인수인 15.0은 큰따옴표를 생략해도 되고 소수점은 생략할 수 있다.

부스트코스
https://www.boostcourse.org/opencourse

부스트코스 쉽게 배우는 자바 1
https://www.boostcourse.org/cs126


profile
성장하는 developer

0개의 댓글