본문 바로가기

코딩공부/JAVA

[11] JAVA 직접 컴파일하기(1) - 실습소개, 실행환경(javac, 환경변수)

이클립스와 같은 개발도구를 이요하지 않고 자바로 만든 프로그램을 컴파일하고 실행하는 방법

직접 컴파일하고 실행하는 것은 사용중인 운영체제에 대한 많은 지식이 필요할 수 있다.

 

자바가 동작하는 흐름

1. Compile : java 확장자가 붙은 소스코드를 class 확장자가 붙은 실행파일로 변환

2. Run : class 확장자가 붙은 파일을 'Java'로 실행

3. Input : 실행할 때, 입력값에 따라서 다르게 동작하여 출력값을 만들어 보자

 

(3가지 실습)

1. Program.java 파일을 컴파일하여 실행가능한 Program.class 파일로 만든 후, 'java'를 이용해서 프로그램을 실행

// Program.java

public class Program {

	public static void main(String[] args) {
		System.out.println(1);
        System.out.println(2);
        System.out.println(3);
	}

}

 

2. OkJavaGoInHome.java 파일을 컴파일하여 실행 - 클래스 import

Elevator 클래스는 코드 내에 있지 않고, [org>opentutorials>iot] 디렉토리 하위에 Elevator 클래스가 존재한다.

따라서 OkJavaGoInHome.java 를 실행시키기 위해서는 org.opentutorials.iot 의 Elevator.java 파일을 '로딩'해야 실행할 수 있다.

// OkJavaGoInHome.java

import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;

public class OkJavaGoInHome {

	public static void main(String[] args) {
		String id = "JAVA APT 507"; 
        
        // Elevator call 
        Elevator myElevator = new Elevator(id);
        myElevator.callForUp(1);
         
        // Security off 
        Security mySecurity = new Security(id);
        mySecurity.off();
         
        // Light on
        Lighting hallLamp = new Lighting(id+" / Hall Lamp");
        hallLamp.on();
         
        Lighting floorLamp = new Lighting(id+" / floorLamp");
        floorLamp.on();

	}
}

 

3. OkJavaGoInHomeInput.java 파일을 컴파일하여 실행 - Arguments

args 라는 변수를 이용해 사용자가 입력한 정보를 가져와서 출력해주고 있다. 즉, 실행할 때 어떻게 입력값을 받을 수 있는지 알아보자

 

// OkJavaGoInHomeInput.java

import javax.swing.JOptionPane;
import org.opentutorials.iot.DimmingLights;
import org.opentutorials.iot.Elevator;
import org.opentutorials.iot.Lighting;
import org.opentutorials.iot.Security;

public class OkJavaGoInHomeInput {

	public static void main(String[] args) {
          // paramter, 매개변수
          String id = args[0];
          String bright = args[1];

          // Elevator call 
          Elevator myElevator = new Elevator(id);
          myElevator.callForUp(1);

          // Security off 
          Security mySecurity = new Security(id);
          mySecurity.off();

          // Light on
          Lighting hallLamp = new Lighting(id+" / Hall Lamp");
          hallLamp.on();

          Lighting floorLamp = new Lighting(id+" / floorLamp");
          floorLamp.on();

          DimmingLights moodLamp = new DimmingLights(id+" moodLamp");
          moodLamp.setBright(Double.parseDouble(bright));
          moodLamp.on();

	}

}

 

실행환경

각 운영체제에서 자바를 컴파일하고 실행할 때, 전체적인 프로그램의 순서와 의미를 이해하고 넘어가자

구체적으로 운영체제에서 어떻게 하는지는 검색을 통해서 알아가자

 

자바를 컴파일 하기 위해서는 명령어를 이용해야한다. 각 운영체제별 명령어를 실행시킬 수 있는 프로그램을 이용

  • Windows - (윈도우키 + R : 실행창) cmd
  • MacOS - (Command + space : spotlight) Terminal 

javac

'javac'를 통해서 컴파일을 한다. 터미널에 'javac'를 입력하면 사용법을 볼 수 있다.

 

▶ javac 가 있는 위치?

  • Windows - C:\Program Files\java\jdk-xxx\bin 폴더 하위에 java.exe 와 javac.exe 프로그램이 cmd창에서 java 와 javac 명령을 쳤을 때 실행되는 파일이다.
  • MacOS - /usr/libexec/java_home 라고 명령어를 치면 java 프로그램이 설치된 위치를 알 수 있다.

    bin 디렉토리에 java와 javac 실행파일이 있다.

  • Linux(Ubuntu) - which java , which javac 명령을 통해서 설치된 경로를 확인할 수 있다.

 

▶ 터미널의 어느 경로에 있던지 java, javac 가 실행되는 이유는 ?

PATH 라는 환경변수 때문이다.

 

각 운영체제별 환경변수 확인

Windows

[내 PC] 우클릭 > 속성 > 고급 시스템 설정 > 환경변수 > [사용자 변수] 사용중인 계정에만 셋팅된 설정 값, [시스템 변수] : 이 시스템을 쓰는 모든 유저에게 적용되는 셋팅 (*아마 사용자 변수의 설정이 우선순위가 높을 것이다. )

Path 에 설치한 자바의 디렉토리 경로의 bin 디렉토리가 자동으로 세팅된다.

cmd창에서 java 명령을 치면 운영체제는 현재 명령을 내린 위치의 경로에 java가 존재하는지를 확인 후, 없다면 Path 를 참조해서 Path 목록의 디렉토리를 하나하나 찾아보면서 java 파일을 찾는다. (모든 Path 경로 내에 java 가 없다면, 시스템은 '파일을 찾을 수 없습니다.'라고 error를 띄우게 된다. ) 자바가 실행이 안된다면 이 Path 환경변수를 추가해주면 된다.

 

 

MacOS, Linux

터미널에서 echo $PATH 명령으로 지금 등록되어있는 모든 경로를 확인할 수 있다.

 

 

java가 실행되지 않는다면 직접 $PATH 환경변수에 java 실행파일의 경로를 추가해주자

nano ~/.bash_profile 파일을 편집

nano : 커맨드라인에서 사용하는 에디터

~/ : 사용자 홈 디렉토리

 

export PATH=$PATH:/java실행파일경로 내용 추가