자바(Java) - Hello의 동작 원리

지원·2023년 8월 24일

Java Programming

목록 보기
1/25

Hello.java의 3가지 중요한 부분


pulic class Hello {
....
}
  • pulic class로 정의된 Hello 클래스
  • pulic class의 클래스 이름과 파일 이름은 같아야 한다.⭐⭐(대소문자 구분)⭐⭐

public static void main(String[] args) {
....
}
  • 클래스는 필드(Field)와 메소드(Method)를 가질 수 있다.
    함수 ❌❌❌, 메소드이다.
  • 프로그램이 실행하려면 반드시 가져야 하는 main 메소드
  • Java로 만든 프로그램이 실행되려면 위의 코드(Code)를 가지고 있어야 한다. (=프로그램 시작점)

System.out.println("Hello");
  • 큰따옴표를 제외하고 대문자로 시작하는 것은 클래스다.
  • System.outSystem이 가지고 있는 out이라는 의미
  • out.printlnout이 가지고 있는 println이라는 의미
  • println 뒤에 괄호는 'print 메소드'라고 한다.
  • out은 괄호가 없는데, 'out 필드'라고 한다.
  • out이 가지고 있는 println 메소드의 역할은 괄호 안의 내용(큰 따옴표 안의 내용)을 화면에 출력한다. 즉, "Hello"를 출력
    - 큰따옴표를 포함하여 문자열(String)이라 한다.


    즉, 위의 코드는

System이라는 이름의 클래스. 그 System 클래스가 가지는 필드 out. 그 out이 가지는 println 메소드
↪ (ex) 자동차.엔진.시동걸다()


구글에 java system api를 검색하면

https://docs.oracle.com/javase/8/docs/api/java/lang/System.html 참고

system이 가지는 Field가 세 가지 있다.

  • err
  • in
  • out
    그 중 out 필드를 보면 타입(Type)이 PrintStream
    printStream이 가질 수 있는 메소드에 println 메소드가 있는 것을 확인할 수 있다.

컴파일


  • 컴파일 시, 반드시 javac(자바 컴파일러)라는 프로그램 필요하다.
    javac Hello.java
  • 터미널에 위의 명령을 입력 -> Hello.java 파일을 읽어들여서 컴파일한다.
  • 컴파일을 성공하면 Hello.class 파일 생성되고, 컴파일이 실패하면 오류 메시지가 보여진다.
  • Hello.class 파일을 바이트(byte) 파일 이라 한다.
    -> Hello.java는 에디터 파일로 열어 보면 사람이 이해할 수 있는 말로 되어 있지만, Hello.class는 사람이 알아볼 수 없는 말로 되어 있다.

CPU는 2진수의 기계어만 이해할 수 있다.

CPU가 이해할 수 있는 프로그램을 어떻게 작성할 수 있는지 -> 사람이 이해할 수 있는 문자, 기호, 숫자 등을 기계가 이해할 수 있도록 변환해주는 컴파일이 생기게 되었다.

하지만 CPU가 다르면 각각의 CPU가 가지는 명령어들이 호환이 안되는 문제가 생겼다.
그래서 소스 코드를 바로 바꾸지 말고 소스 코드와 기계어 중간 형태의 결과물을 만들자라는 생각을 하게 된 것이다.


그 중간의 결과물이 바이트 코드(byte code) 이다.
javac Hello.java 라고 명령하면 소스 코드와 기계어의 중간 단계인 바이트(byte) 코드가 만들어진다.

C언어는 소스 코드가 컴파일되면 기계어로 된 코드로 바로 변환되지만, Java 언어는 중간 형태의 바이트 코드가 만들어진다.
이 중간 형태의 바이트 코드를 CPU와 OS에 상관없이 사용할 수 있다. <- JVM 덕분에~


JVM으로 실행하기


  • 자바로 작성된 프로그램 = 컴파일된 클래스 => 바이트 파일
  • 작성된 바이트 파일을 실행하려면 JVM(Java Virtual Machine)이 필요하다. 이 JVM 역할을 수행하는 것이 java 명령이다.
    (ex) hwp 파일을 읽으려면 아래한글 워드 프로세서가 필요하듯
  • JVM바이트 코드를 읽어 들여 실행한다.
    java Hello 이때 확장자 이름은 입력 ❌
  • java 프로그램은 Hello 클래스를 한줄 씩 읽어나가면서 실행한다. -> 인터프리터(Interpreter) 방식

⭐자바는 기계어로 바로 컴파일되는 것이 아니라, 바이트 코드로 만들어지고 컴파일로 만들어진 바이트 코드는 CPU/OS에 맞게 설치된 JDK안에 있는 JVM이 한 줄씩 읽어나가면서 실행한다.


예제


  1. 이름, 성별, 이메일 주소를 출력하는 클래스를 작성하고, 컴파일하고, 실행하시오.
public class problem {
	public class void main(String[] args) {
		System.out.println("이름: 000");
        System.out.println("성별: 000");
        System.out.println("이메일 주소: 000 @ naver.com");
	}
}

VSCode에서 터미널 단축키는 crtl + 백틱( ` )

컴파일

javac problem.java
java problem

결과

이름: 000
성별: 000
이메일 주소: 000 @ naver.com
profile
우주 정복자

0개의 댓글