본문 바로가기

JAVA/혼자공부하는자바

[JAVA기초] Windows10 자바 프로젝트 생성부터 실행까지 (Eclipse_IDE, 명령프롬프트, 모듈)

728x90

자바 프로그램의 개발과 실행 과정

참고 자료 : https://www.youtube.com/watch?v=ZP3GWhOIdGY&list=PLVsNizTWUw7HZTPU3GpS7nmshXjKKvlbk&index=6&ab_channel=%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4

1. 사용자가 코딩을 하여 만든 파일을 '자바 소스 파일(Hello.java)'이라고 한다.

 

2. 위 소스 파일을 'javac' 명령어(컴파일)를 통해 만들어진 파일을 '바이트 코드 파일(Hello.class)'라고 한다

 

3. 위 바이트 코드 파일을 'java' 명령어(JVM이 기계어 번역, 실행)를 통해 기계어로 변환하여 실행시킴

 

 

바이트 코드 파일& 자바 가상 기계

  • 자바 프로그램은 바이트 코드(byte code) 파일(. class)로 구성
  • 바이트 코드 파일 = 개발이 완성된 자바프로그램 형태
  • 바이트 코드 파일은 운영체제에서 바로 실행할 수 없음
  • 때문에 자바 가상기계(JVM)을 통해 완전한 기계어로 번역 후 실행함

 

 

이클립스에서 실습하기

이클립스를 실행시킨 뒤 File -> New -> Java Project 클릭

 

 

Project name을 입력하여 하단의 Next 클릭

* 중앙의 JRE을 통해 현재 설치된 JDK버전이 일치한 지 확인

 

 

앞으로 이 프로젝트에 src파일은 src폴더에 저장이 되며 src파일의 컴파일 후에는

하단에 Default output folder에 경로인 bin폴더에 저장이 되겠다는 내용을 확인

Finish 클릭

 

 

모듈기술자파일을 생성할것인지 묻는 창

Java8버전에는 모듈 파일이 없었으나, Java11 버전부터는 모듈 파일이 반드시 필요하여 Create를 클릭

(기본적으로는 프로젝트와 동일한 이름을 부여)

 

프로젝트가 생성된 모습

 

 

좌측 탐색창에 src폴더에 우클릭을 하여 New -> Package를 클릭

 

패키지 이름을 작성하고 Finish 클릭

 

 

패키지 폴더가 생성됨을 확인할 수 있다.

패키지는 파일시스템의 폴더와 비슷한 구조를 갖고 있으며 Java언어의 요소로

Java11에서는 소스 파일을 작성할 때 반드시 Package를 생성하고 그 안에 소스파일을 작성해야 함

 

Java8은 이런 조건이 없지만 Java11은 앞으로 다른 프로젝트에서 이용될 수 있는 모듈로 활용할 수 있어서

반드시 프로젝트 내부에는 Package를 생성하고 그 안에 Source File를 생성하여야 한다.

 

 

 

생성한 Package에 우클릭을 하여 New -> Class로 클래스를 생성한다.

 

 

클래스 이름을 정하고 하단에 public static void main을 체크하여 Finish 클릭

 

 

클래스가 생성된 화면이며 일부 코드가 작성되어 있음을 확인할 수 있다.

 

 

main함수의 중괄호 사이에 System.out.println("Hello, Java"); 를 입력

* 코드 작성 시 System의 S는 반드시 대문자로 입력할 것

 

 

System을의 첫 철자를 소문자로 하여 오류(빨간 줄)가 발생

 

 

중간의 out의 철자를 대문자로 바꾸어도 오류 발생

 

 

완전하게 입력 후, 저장하여 컴파일을 한 뒤 F11(디버깅)을 누르거나 툴바에서 Run버튼을 클릭하여 문자열을 출력

 

* 이클립스에서는 벼로 컴파일 버튼이 없으며 코드 작성 후 저장을 하면 자동으로 컴파일되어 바이트 파일이 생성되며 bin폴더(프로젝트 생성 시 설정한 폴더)에 저장됨

 

 

 

명령 라인에서 실습하기

 

컴파일하기

이클립스에서 생성한 src폴더에 우클릭하여 Show in -> System Explorer을 클릭하여 파일 탐색기를 통해 접근할 수 있다.

 

 

명령 라인을 통해 소스파일인 src폴더의 내용을 컴파일하여 bin폴더에 옮기는 것이 목적, bin폴더 내부의 파일들을 전부 지우도록 한다.

 

 

명령 프롬프트를 열고 'cd [프로젝트 폴더의 주소]'를 입력하여 경로를 변경해준다.

 

 

위 경로 설정 후 dir를 입력하면 위 사진과 같이 경로 내 파일들을 확인할 수 있다.

 

 

tree /f 입력하면 경로 내 파일들의 구조를 확인할 수 있다.

여기서 소스파일(. java)인 src\sec03\exam01\Hello.java를 바이트 파일(. class) 로컴 파일 하여 bin폴더를 옮기는 것이 목적

 

 

컴파일 명령어 : javac -d bin src/module-info.java src/sec03/exam01/*. java 입력

* 컴파일 명령어 : javac -d [바이트 코드 파일 저장 위치] [소스 경로/module-info.java] [소스 경로/*. java]

* 위 warning은 모듈의 이름 뒤에는 되도록이면 숫자를 사용하지 말라는 의미

* -d는 저장할 위치를 지정하는 명령어

 

bin폴더에 정상적으로 compile 된 것을 확인할 수 있다.

 

 

실행하기

실행 명령어 : java -p bin -m chap01/sec03.exam01.Hello

 

정상적으로 실행된 모습

* java -p [바이트 코드 파일 저장 위치] -m 모듈 이름/패키지 이름.... 클래스 이름

* 클래스까지의 경로는.(점)으로 구성

* -p 명령어는 바이트 코드 파일 내 모듈 기술자가 있는 경로를 -p 뒤에 입력하라는 뜻

* -m 명령어는 모듈의 이름(chap01)과 실행시킬 클래스(Hello)를 입력하라는 뜻

 

모듈 기술자의 이름(chap01)을 입력한다.

 

 

 

모듈(Module)이란

  • 외부에서 재사용할 수 있는 패키지를 묶은 것
  • 이클립스의 프로젝트는 하나의 모듈을 개발하는 것 

모듈 기술자(module-info.java)

  • 해당 모듈의 이름이 무엇인지
  • 해당 모듈이 의존하는 모듈이 무엇인지
  • 해당 모듈을 외부에서 어떻게 사용할 수 있는지 내용을 기술

 

Java에서는 특정 모듈을 실행할 때 외부 모듈이 필요하기도 함

https://www.youtube.com/watch?v=rJtbCr9DjvQ&list=PLVsNizTWUw7HZTPU3GpS7nmshXjKKvlbk&index=7&ab_channel=%ED%95%9C%EB%B9%9B%EB%AF%B8%EB%94%94%EC%96%B4

우리가 만든 chap01 모듈(단순 출력 모듈)은  java.base 모듈이 필요하나 기본적으로 적용되어 따로 입력해줄 필요는 없음

 

java.se 모듈에는 java.desktop, java.sql 모듈 등이 있어 해당 모듈들을 사용하기 위해서는 모듈 기술자에 requires 명령어를 통해 기술해줄 필요가 있다.

 

 

참조되는 모듈이 많아 requires로 시작하는 내용이 길어지므로 requires java.se;를 통해 통일 가능

 

Hello 클래스에 javax.swing 외부 모듈을 호출하였으나 컴파일 오류가 발생함

 

 

모듈기술자에 requires java.se; 를 입력해주니 오류가 사라짐

 

모듈화는 패키지 보안과 최적의 런타임 이미지를 만들기 위해 필요한 기술이다.

java8 버전에서는 java.se의 모든 모듈을 불러와 사용하였기 때문에 단순 문장 출력에도 큰 용량이 필요하였으나

모듈화가 된 java11 버전에서는 적은 용량으로도 문장 출력 가능