[JAVA] 직접 컴파일 실행하기

아임 레조·2022년 6월 22일
2

JAVA

목록 보기
9/21

간단한 프로그램 직접 컴파일 하기

  • javac - java를 컴파일해주는 역할
  • java와 javac 설치경로 확인
    C: > Program files > Java > bin(binary) > java.exe / javac.exe
  • 환경변수: 자바라고 명령을 내렸을 때, 저 명령이 현재 어디에 있든 실행되는 이유는 path라고 불리는 환경변수 때문이다.
  • 환경변수: 내 컴퓨터 > 속성 > 고급 시스템 설정 > 환경 변수
  • 내 컴퓨터에만 설정된 것 (위쪽 사용자 변수)
    이 시스템을 사용하는 모든 사람에게 적용되는 설정 (아래쪽 시스템 변수)

추가정보
Path 시스템 변수 설정

cmd에서 컴파일 하기(윈도우 기준)

  • 검색창에 cmd라고 입력한다.
  • 테스트를 위해 기존에 있던 .java와 .class파일을 활용해본다.
  • 미리 작성해둔 파일에서 .java만 남기고 .class파일은 삭제한다.

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

cmd에 javac 라고 입력한다. javac는 java파일을 컴파일해서 class파일을 만들어주는 역할을 한다. cmd를 자세히보면 Usage가 있다.

Usage: javac <options> <source files>

  • .java파일의 경로 확인(source files 입력을 위해)을 위해서 윈도우 검색창에 '파일 탐색기'를 입력한다. .java파일이 있는 곳까지 찾아서 들어간 뒤 파일 경로를 복사한다.
  • cmd에서 cd 명령어 뒤에 파일 경로를 복붙해서 프로젝트 디렉토리로 이동시켜 준다.
  • dir 명령어로 디렉토리 내부 구조를 확인할 수 있다(.java파일만 있고 .class는 없음을 알 수 있다).

자바 파일 컴파일하기

  • 앞에서 이미 찾아둔 Usage에 맞게 cmd에 입력해준다. "javac + (Source files)파일경로"

  • 이때, javac.exe가 위치해 있는 경로가 path에 등록되어 있는 상태여야 javac를 사용할 수 있다.

  • dir 명령어로 디렉토리 내부 구조를 다시 보면 .class파일이 생긴 것을 확인할 수 있다.

  • 이 class파일은 컴퓨터가 이해할 수 있는 상태로 바꾼 것이다(compile).

  • JVM(java)이 OS에 설치되어 있다는 전제하에 컴퓨터가 이해할 수 있다.

실행하기

  • 컴파일된 프로그램을 실행하기 위해서는 cmd에서 java 명령어를 사용하면 되는데 이때 .class는 붙이지 않는다.
  • 출력 순서:
    java는 우리가 작성한 코드에서
    1) cmdtest라는 이름을 가진 class를 찾는다
    2)class 내부에서 main이라는 이름을 가진 method를 찾아서
    3) main 내부의 코드를 실행시킨다.
  • 결과가 나오는 것을 확인할 수 있다.

라이브러리 사용하는 프로그램 직접 컴파일하기

이전에 만든 파일 중 외부 라이브러리 객체를 사용하는 프로그램을 선택해 직접 컴파일을 해본다. 'OKJavaGoinHome'이라는 프로그램이다. 코드에서 Elevator와 관련된 코드가 없음에도 사용할 수 있는 이유는 위에서 import를 통해 OKJavaGoinHome 클래스가 있는 폴더의 org.opentutorials.iot의 클래스들을 불러들이고 있기 때문이다.

테스트를 위해서 lib라는 parent폴더를 만들어주고 org 폴더를 그 아래로 복붙한다. .class파일은 모두 삭제한다. org.opentutorials.iot 패키지는 OKJavaGoinHome과 동일한 위치에 있지 않고 lib 라이브러리의 일부가 되었다. 이때 다시 컴파일 한다면?

우리가 컴파일하는 파일과 같은 디렉토리에 있지 않기 때문에 error가 나오게 된다. 해결을 위해 cmd에 javac 명령어를 입력해본다. 그럼 아래 class path라는 것이 나온다. 컴파일하려고 하는 클래스들이 어디에 있는지 이야기해주어야 찾아가서 실행할 수 있다는 내용이다.

cmd에 javac를 입력하고 '-cp'를 입력한다. '-cp'는 클래스를 여기서 찾아주세요'라는 것으로 쌍따옴표 안에 ".;lib"를 쓰면 '.'은 현재 디렉토리를 말하고 ';(윈도우의 경우는 세미콜론)', lib 디렉토리에서도 추가로 찾아봐달라는 뜻이다. 엔터를 했을 때 아무런 에러도 뜨지 않으면 제대로 컴파일 되어서 삭제했던 모든 class 파일들이 다시 생긴 것이다.

그럼 제대로 실행하는지 다시 cmd에 'java OKJavaGoinHome'을 입력해보는데 Exception이 나오면서 Elevator를 찾을 수 없다고 나온다. 이유는 Elevator가 lib 아래에 있기 때문이다. '-cp'를 통해서 lib 아래도 찾아보라고 명령해준다. '-cp'에 lib만 입력해주면 자바를 실행시키는 디렉토리에서만 'OKJavaGoinHome' 클래스파일을 찾도록 약속되어 있기 때문에 현재 디렉토리에서도 찾도록 표시해주어야 한다.

현재 디렉토리에서 OKJavaGoinHome.class 파일을 열어서 실행시키다가 elevator가 있으면 lib의 클래스 파일을 찾아서 실행시키는 것이 되는 것이다.

  • 라이브러리: 타인이 만든 잘 정리된 프로그램

터미널 환경에서 Arguments 입력해서 출력하기

  • OKJavaGoinHomeInput.java를 컴파일
  • OKJavaGoinHomeInput 프로그램 실행: 에러가 나오는데 이유는 기존 코드에서 args 파라미터를 이용해 값을 받고 있는데 터미널에서 arguments를 주지 않고 있기 때문이다.

  • cmd에 java OKJavaGoinHomeInput을 입력하고 그 뒤에 args에 넣고 싶은 arguments 2개의 문자열을 차례로 입력한다.
  • 잘 출력되어서 나온다.
  • arguments를 다른 것으로 바꾸어도("Pusan APT 803" 45.2) 잘 출력된다. 두번째 인자의 따옴표는 생략 가능하다.
profile
어쩌다보니 백엔드 개발자/ 번아웃 없이 재밌게 개발하고 싶어요

0개의 댓글