[JAVA]맛보기_5

thx4all·2023년 8월 10일

Java

목록 보기
5/8
post-thumbnail

▶︎[JAVA]맛보기 포스팅는 유튜브 '생활코딩'의 JAVA1 수업을 수강하며 기록했다.

12. 직접 컴파일하고 실행하기

12.1. 소개

이클립스와 같은 개발도구를 이용하지 않고, 자바로 만든 프로그램을 컴파일/실행해보기
-> 어떤 컴퓨터에서든 자바만 있다면 컴파일하고 실행할 수 있을 것이다.

하지만 당분간 개발도구 없이 자바를 사용할 일이 거의 없을 것이고, 직접 컴파일하고 실행하는 일은 운영체제에 대한 많은 지식이 필요할 수 있다.
따라서 12번 강의는 같이 해보되, 안된다고 붙들고 있을 필요가 없다.
다만, 자바가 동작되는 흐름을 이해하면 된다.

< 이번 수업에서 해볼 것 >

  1. 컴파일(Compile): java확장자가 붙은 소스 코드를 class확장자가 붙은 실행 파일로 만들기
  2. 실행(Run): class확장자가 붙은 파일을 실행하는 것
  3. 입력(Input): 파일을 실행함에 있어 입력값을 주는 것

12.2. 실행환경 살펴보기 (MacOS)

JAVA를 명령어로 컴파일 해야한다.
따라서 먼저 명령어를 실행할 수 있는 프로그램을 띄워야 한다.

command+space bar -> 'terminal' 입력 후 실행

  • pwd(Print Working Directory): 지금 내 위치 어디야?
  • cd(Change Directory): 위치 이동할래 - 한칸 띄고 가려는 위치주소를 입력한다.
    cd /Users/yngbao/Desktop/eclipse-workspace/java1
    아래 사진과 같이 파인더 하단에서 폴더 경로 이름을 복사하면 된다.

  • ls(List): 디렉토리 안에 있는 항목들을 보여줘.
yngbao@yug-yejin-ui-MacBookAir java1 % ls
Data_and_operation	Helloworld
HelloWorldGUI		Programing

Programing이라는 디렉토리로 들어가고 싶다면, cd Programing이라고 입력한다.

위 사진은 지금까지 배운 명령어를 사용해 Programing이라는 디렉토리로 이동하여 항목을 확인한 모습이다.

한편, 터미널에 java 라고 입력했을 때 그 내용이 결과로 나타나는데, 현재 내 위치와 상관없이 실행되는 이유는 무엇일까?
'환경변수' 때문이다. (아직 이해 못해도 그냥 참고용) java라고 명령을 내리면 운영체제는 먼저 현재 디렉토리에서 파일을 찾고, 없다면 환경변수의 path를 참고해서 파일을 찾는다. 그래도 없다면 파일을 찾을 수 없다고 결과를 준다.
만약 java라고 명령을 내렸는데 실행이 안된다면 PATH에 경로를 추가하는 방법을 검색해보자.

12.3. 컴파일과 실행하기

컴파일 하려는 .java 파일이 있는 디렉토리로 내 위치를 이동시켰다면, javac 파일명.java이라고 명령어를 입력하여 .class 파일을 생성할 수 있다.
(기존에 예제를 실행하면서 만들어진 클래스 파일은 미리 삭제 해두었다.)

Programing.java 파일을 컴파일하는 javac Programing.java 명령어를 통해 Programing.class 라는 파일이 생성되었음을 확인할 수 있다. (그나저나 Programming인데 파일 만들때 오타..)

그 다음, java 파일명 이라는 명령어를 통해 프로그램을 실행해봤다.
javac로 컴파일 할 때 .java 를 붙인것과 달리 java로 실행할 때는 .class를 붙이지 않고 파일명만 적는다.

파일이 잘 실행된 것인지 코드를 확인해보자. cat 파일명.Java

12.4. 라이브러리 이용

다른 사람이 만든 프로그램을 이용하고 있는 코드라면 조금 더 복잡하다.
아래 사진에서 표시된 것들은 같은 디렉토리에 패키지로 불러왔던 프로그램들을 사용한 것이다.

이때, import문을 통해 불러온 프로그램도 컴파일 되어 있어야 그 기능을 이 프로그램에서 사용할 수 있게 된다. (보통 컴파일하면 자동으로 임포트한 파일도 함께 컴파일 해준다.)
반드시 본 프로그램과 불러온 패키지가 같은 디렉토리 안에 있어야 컴파일 및 실행이 가능하다.

하지만 같은 디렉토리에 있지 않다면? 패키치의 위치를 알려줘야 한다 (path)
프로그램 실행에 필요한 파일들의 모든 위치(본 프로그램 포함)
--class-path 줄여서 -cp ".:(연결해줄 디렉토리명):(또다른 디렉토리가 있다면)"
.(현재 디렉토리) :(MacOS에서 구분자)

javac -cp ".:lib" OkJavaGoingHome_0.java 라는 명령어를 통해 OkJavaGoingHome_0.java 라는 파일을 컴파일 했다.
실행할 때도 마찬가지다.

java -cp ".:lib" OkJavaGoingHome_0 라고 path 정보를 추가하여 실행해주어야 한다.

다른사람이 사용할 수 있도록 정리정돈된 프로그램들을 라이브러리'Library'라고 한다.
프로그램은 혼자 만드는 것이 아니기 때문에 이 세상에는 어떤 라이브러리들이 있는가를 살펴보는 것, 그것은 인생의 견문을 넓히는 것 만큼이나 중요한 일이다. -이고잉-

수업을 듣다보니, 패키지와 라이브러리의 개념이 헷갈려서 검색해보았다. ▶︎ 참고링크

import java.util.Scanner; // 자바 기본 라이브러리의 java.util 패키지의 Scanner 클래스를 사용 
import java.util.* // 자바 기본 라이브러리의 java.util 패키지 내 모든 클래스를 사용 
import org.springframework.boot.SpringApplication; // springboot 라이브러리의 org.springframework.boot 패키지의 SpringApplication 클래스 사용 

12.5. 입력과 출력

프로그램을 직접 컴파일하고 실행할 때, 입력값에 따라 다르게 동작하는 프로그램을 어떻게 실행할 수 있을지 살펴보자.
OkJavaGoingHomeinput_0.java 라는 파일을 컴파일하고 실행했더니 오류가 생겼다.

코드 12번째 줄에서 오류가 발생했다는 건데, 12번째 줄은 밑줄 친 부분이다.
id의 값을 args[0] (사용자 입력값) 으로 받아와야 하는데 입력된 게 없기 때문이다.

그렇다면 프로그램 직접 시에 입력값을 주는 방법이 뭘까?

이클립스에서 arguments를 설정했던 것과 같은 형태로 뒤에 입력값을 붙이면 된다.

java OkJavaGoingHomeinput_0 "Java APT 507" "9.5" 라고 입력하여 프로그램이 잘 실행된 것을 볼 수 있다.
*명령프로그램(터미널)에서는 띄어쓰기를 통해 명령어의 값들을 구분하므로, 띄어쓰기가 매우 중요하다.

오늘은 여기까지!


느낀 점

"컴퓨터 뭐가 안돼요"라고 했을 때, 누군가 명령 프롬프트로 열심히 찾아보는 걸 보고 너무 신기했던 경험이 있다. '저걸로 뭘 알 수 있는걸까', '알 수 없는 말 뿐인데, 저게 코딩일까' 막연하게 신기해하고 넘어갔었다.
오늘은 내가 그 명령 프롬프트를 통해서 java 파일을 컴파일하고 실행하는 경험을 했다.
그때 그 분은 컴퓨터 운영체제에 대해서도 많이 알기 때문에 그런게 가능했구나 라는 것을 이해하게 됐다. 나는 아직 이클립스 프로그램을 다루는 것조차 어렵고 벅차지만 언젠가 운영체제까지도 익숙해질 수 있는 날이 올까 기대된다!

profile
세상의 온도를 높일 개발자 도전기

0개의 댓글