Practice JAVA - 개발 과정, 시작하기

최정환·2022년 12월 6일
0

Practice JAVA

목록 보기
2/10

개발과정

자바 프로그램 개발을 위해선 .java 생성 후 코드를 작성한다.

.java가 완성된다면 compiler인 javac를 이용해 compile한다.

성공한다면 .class인 바이트 코드 파일이 생성된다.

바이트 코드도 완전한 기계어가 아니기 때문에 java 명령어를 실행해 사용해야한다.
이때 JVM이 기계어 번역 후 실행하게 해준다.

JVM

컴파일된 바이트 코드가 모든 운영체제에서 바로 실행할 수 없고 JVM이라는 번역기가 필요하다.

JVM을 사용해 바이트 코드 파일을 다양한 운영체제에서 수정하지 않고 사용할 수 있도록 만들 수 있다.

javac 명령어로 compile된 바이트 코드(.class) 파일은 JDK가 설치된 어떤 운영체제에서도 java 명령어로 동일하게 실행 가능하다.



프로젝트 시작하기

프로젝트 생성 후 만약 JDK 8보다 높은 버젼의 java를 사용한다면 module-info.java를 설정해 줄 필요가 있다.

Java9 이전까지 흔히 이야기 하는 캡슐화를 위한 범위는 간단하게 package와 class 그리고 class 내부의 private, public, protected가 전부였다.

이후 추가된 module은 여러개의 패키지를 한 번더 캡슐화 하여 package에 대한 접근 권한을 부여하고 해당 module에서 외부에 노출할 패키지를 정의할 수 있게 되었다.

위와 같은 역할을 module-info가 하는 것이다.
이 파일의 위치는 소스 패캐지의 최상단에 위치해야한다.

module name {
	requires 사용할 모듈 이름
}

모듈의 이름은 팀내의 컨벤션이 정해져있지 않는 이상 내가 정할 수 있다.

package란

자바는 소스 파일 및 컴파일된 바이트 코드 파일들을 기능별로 쉽게 관리하기 위해 패키지를 사용한다.

패키지는 파일 시스템의 폴더와 비슷하다. JDK 11 이후 부터는 직접 생성하는 프로젝트도 모듈로 활용할 수 있기 때문에 반드시 패키지를 요구한다.

패키지를 생성했다면 이제 파일(class)을 생성한다.

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello JAVA");
    }
}

디버그나 실행을 하게 된다면 빌드가 되면서 out 폴더가 생기면서 바이트 코드 파일을 생성한다.

커맨트 라인에서 컴파일하고 실행하기

JDK 11 버전 기준으로 컴파일을 한다면 아래와 같은 명령어를 실행한다.

javac -d [바이트 코드 저장 위치] [소스 경로/module-info.java 소스경로/*.java]

모듈 기술자(module-info)에 requires 키워드로 의존성 모듈이 기술되어 있기 때문에 module-info도 꼭 포함시켜줘야한다.

컴파일러는 소스 파일을 컴파일하기 위해 모듈 기술자에 기술된 의존성 모듈을 참고한다.

컴파일 후에 tree 명령어를 사용하면 폴더 구조를 확인할 수 있는데 이때 위에서 설정한 바이트 코드 저장 위치에 바이트 코드 파일이 생성되어 있는 것을 확인할 수 있다.

바이트 코드 실행

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

ex)

javac -d bin src/module-info.java src/chap01/Hello.java
├── bin
│   ├── chap01
│   │   └── Hello.class
│   └── module-info.class
java -p bin -m module/chap01.Hello


코드 시작하기

javac로 컴파일하면 클래스 이름에 .class가 붙어 바이트 코드 파일이 생서오딘다.
일반적으로 컴파일된 바이트 코드를 클래스라고 간단하게 부른다.

java 명령어로 바이트 코드 파일을 실행하려면 클래스 블록 내부에 main() method를 가지고 있어야한다.

바이트 코드를 실행하게 되면 제일 먼저 main()을 찾아 블록 내부를 실행한다.

public class Hello {
	// entry point
	public static void main(String[] args){
    	System.out.println('Hello JAVA')
    }
}

0개의 댓글