TIL - Java(java 실행환경, java 컴파일하기)

연시아·2022년 7월 20일
0

TIL

목록 보기
45/51
post-thumbnail

22.07.20

🧡 Java 실행환경

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

  • window - (윈도우키+R:실행창-cmd)
  • MacOs - (Command+space:spotlight-Terminal)
  • 💛 javac

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

    javac가 있는 위치는 ?

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

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

    🌼 터미널의 어느 경로에 있던지 java, javac가 실행되는 이유는 ?
    PATH라는 환경변수 때문입니다.

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

    window
    [내 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실행파일경로 내용 추가하기

    💙 Java 컴파일하는 실습소개

    자바가 동작하는 흐름
    1. Compile : java 확장자가 붙은 소스코드를 class 확장자가 붙은 실행파일로 변환
    2. Run : class 확장자가 붙은 파일을 'Java'로 실행
    3. Input : 실행할 때, 입력값에 따라서 다르게 동작하여 출력값을 만들어봅시다.

    Program.java 파일을 컴파일하여 실행가능한 program.class 파일을 만든 후, java를 이용해서 프로그램을 실행할 수 있습니다.

    OKJavaGoInHome.java 파일을 컴파일하여 실행 - 클래스 import
    Elevator 클래스는 코드 내에 있지 않고, [org>opentutorials>iot]디렉토리 하위에 Elevator 클래스가 존재합니다. 따라서, OkJavaGoInHome.java를 실행시키기 위해서는 org.opentutorials.iot의 Elevator.java 파일을 '로딩'해야 실행할 수 있습니다.

    OkJavaGoInHomeInput.java 파일을 컴파일하여 실행 - Arguments
    args 라는 변수를 이용해 사용자가 입력한 정보를 가져와서 출력해주고 있습니다. 즉, 실행할 때 어떻게 입력값을 받을 수 있는지 알아봅시다.

    💜 내가 만든 파일로 컴파일하여 실행하기

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

    1. Program.java 파일이 있는 디렉토리 경로로 이동합니다.
      파인더에서 하단에 '경로 이름 복사'를 한 뒤 터미널에서 디렉토리를 이동합니다.
      Program.java 파일이 있고 이전에 만들어진 Program.class 파일은 삭제합니다.
    2. 컴파일 - javac 명령(프로그램)을 이용해서 .java파일을 컴파일하여 .class 실행파일을 생성합니다. javac 컴파일할파일.java
      (error 메세지가 나오게 되면 javac -cp"."Program.java 명령어를 입력하면 됩니다.)
      -cp : class path 옵션
      "." : 현재 디렉토리
    3. 실행파일 (.class)을 실행합니다.
      java 명령어 VM(Virtual Machine)이라고 할 수 있습니다.
      java 프로그램명 or java -cp"."프로그램명
      (주의 : java 명령으로 실행 시 프로그램명 뒤에 .class 확장자를 쓰지 않습니다.)
      프로그램이 잘 실행되어 결과가 출력되는 것을 확인할 수 있습니다.

    🤎 라이브러리를 이용한 코드를 컴파일하여 실행하기

    Elevator 클래스는 코드 내에 있지 않고 [org>opentutorials>iot] 디렉토리 하위에 존재하는 Elevator 클래스를 불러와서 (import) 사용중입니다. 따라서 OkJavaGoInHome.java를 실행시키기 위해서는 org.opentutorials.iot의 Elevator.java 파일을 '로딩' 해야 실행할 수 있습니다.

    org.opentutorials.iot를 패키지라고 합니다. "작은 프로그램들이 모여있는 패키지"

    Elevator.java 코드를 컴파일하여 생긴 Elevator.class 파일을 로딩하는 import 코드
    import 되었기 때문에 "Elevator" 통해서 Elevator.class 파일을 이용할 수 있게 됩니다.

    OkJavaGoInHome.java 파일을 컴파일
    javac OkJavaGoInHome.java 에러메세지가 출력되지 않는다면 성공적으로 class 파일이 생성된 것입니다.

    이 소스코드는 내부적으로 패키지 안에 있는 여러 파일들을 다 필요로하기 때문에 자바 컴파일러가 패키지(org.opentutorials.iot)안에 있는 파일들도 컴파일을 시켜준 것입니다.

    🖤 패키지 경로가 변경된 경우

    lib 디렉토리를 생성한 뒤, org.opentutorials.iot 패키지를 이동시킵니다.

    이동시킨 후, 다시 컴파일을 하면? error가 발생합니다.
    org.opentutorials.iot 패키지를 찾을 수 없어서 발생한 오류입니다.

    javac 사용법을 확인해보자.
    --class-path 옵션으로 컴파일하려는 클래스 파일이 존재하는 경로를 알려줍니다.
    자바컴파일러(javac)에게 "내가 지금 컴파일하려고 하는 이 프로그램은 ---에 있는 이 클래스들이 핑요하니깐 ~ 이 경로에서 찾아라" 라고 알려주는 옵션입니다.

    javac -cp".;lib" OkJavaGoInHome.java
    -cp".;lib" 현재 디렉토리(.)와 ilb 디렉토리에서 클래스 파일을 찾으라는 의미입니다.
    window -> 구분자로 세미콜론(;)을 사용합니다.
    MacOS, Linux-> 구분자로 콜론(:)을 사용합니다 --> javac -cp".:lib" OkJavaGoInHome.java
    OkJavaGoInHome.java 파일이 컴파일되어 OkJavaGoInHome.class 파일이 생성되고, 이 파일에서 필요로하는 클래스 파일 Elevator.class 파일도 자동으로 컴파일해서 만들어줍니다.

    java OkJavaGoInHome 실행하면 error가 발생합니다.
    왜냐하면 'elevator' 클래스를 찾을 수 없어서 발생한 에러입니다. org 패키지가 OkJavaGoInHome.class 파일과 같은 위치에 있었다면 정상적으로 실행되었겠지만 ilb 디렉토리 하위에 org 패키지가 위치하기 때문에 경로를 찾지 못한 것입니다.

    명시적으로 "lib" 디렉토리 하위에 존재한다고 알려줄 수 있습니다.
    javac -cp "lib" OkJavaGoInHome

    문제는 기본적으로 자바는 우리가 자바를 실행시키는 디렉토리에 있는 OkJavaGoInHome.class 파일을 찾도록 약속되어있는데, 명시적으로 "lib"이라고 해놓으면 "lib"에서만 찾게 되고, 같은 디렉토리에서는 찾지 않게 됩니다.
    따라서 현재 디렉토리(.)에서도 클래스를 찾을 수 있도록 -cp 옵션의 값을 ".;lib"이라고 입력하면 정상적으로 프로그램이 실행됩니다.

    Arguments로 값을 입력을 받는 코드를 컴파일하여 실행하기

    OkJavaGoInHomeInput.java 파일을 컴파일 하여 실행합니다.
    args 라는 변수를 이용해 사용자가 입력한 정보를 가져와서 출력해주고 있습니다. 즉, 실행할 때 어떻게 압력값을 받을 수 있는지 알아봅시다.

    tree. 디렉토리에 있는 파일 목록들 출력합니다.

    1. 컴파일
    javac OkJavaGoInHomeInput.java
    2. Argument 값을 입력하여 실행
    java OkJavaGoInHomeInput"java APT 507" 15.0

    profile
    backend developer

    0개의 댓글