[자바] - JDK, JRE, JVM, Compiler, Java EE

yeom yaloo·2023년 11월 21일
0

FISA

목록 보기
1/61
post-thumbnail

자바

[자바 실행]

프로젝트(코드들의 저장 공간) -> 자바 코드 작성 -> 문법상 오류가 없다면 컴파일러는 byte code 생성 (.class 파일 생성)-> 인터프리터를 사용해 해당 바이트 코드 실행

[JDK]

1. JDK 구조

  • JDK는 자바로 코드 개발에 사용할 때 사용하는 kit
  • JDK는 JRE + Compiler + API 로 구성되어 있다.

2. JRE

  • JRE는 Java Runtime Enviornment의 약자로 실행과 관련된 환경
  • JRE는 JVM과 Java Class Library로 이루어짐

3. Compiler

  • 자바 코드를 Byte Code로 변환 시켜주는 작업을 컴파일러에서 진행한다.
    • 자바 코드는 사람이 이해할 수 있는 코드고 이를 기계가 이해할 수 있게 하려면 컴파일러를 사용해서 byte code(.class)로 바꿔줘야 한다.
    • 이때 컴파일러의 경우엔 코드에 문법상 오류가 없어야 한다.

3-1. 인터프리터

  • 컴파일러를 통해서 자바 코드를 바이트 코드로 변환했을 때 해당 바이트 코드를 실행하기 위해서 사용하는 것이 인터프리터다.
  • byte code를 .class로 만들어 준다.
  • 인터프리터 언어와 컴파일 언어가 있는데 자바는 두가지 모두를 사용하는 언어에 해당한다.

4. 번외

[자바 코드와 바이트 코드]
자바를 이용해서 서버를 구현해 서비스를 제공하고 있는 회사가 있다고 가정해보자. 이때 해당 서비스를 제공하기 위해서 java코드까지 필요할까?

해당 문제는 java 코드까지는 필요하지 않다는 것이 정답이다. 왜냐하면 해당 java 코드는 프로그램 실행에 아무런 영향을 미치지 않기 때문이다. byte code만 프로그램 실행에 사용되기 때문에 우리가 서비스를 한다고 하면 byte code만 필요하다.

[bin VS src]

우리는 자바 프로젝트를 생성하게 되면 src 파일과 bin 파일을 볼수 있다.

  • src 폴더의 경우엔 개발자가 작성한 java 코드를 저장하는 경로라고 생각하면 된다.
  • bin 폴더의 경우엔 개발자가 작성한 자바 코드를 이용해 컴파일 후 byte code를 인터프리터를 사용해서 .class 파일을 만들어 저장하는 경로라고 생각하면 된다.

JRE(Java Runtime Enviornment)

1. JRE의 구조

  • JRE는 JVM과 Java class Library를 포함하고 있다.

2. JRE?

  • 실제 환경에서 자바 코드를 실행하는 것(=프로그램 실행)을 목적으로 한다.
  • JVM 실행을 위한 자바 라이브러리를 담고 있다.
  • 자바 버전에 맞춰서 버전을 사용해야 한다. 대부분의 경우엔 JDK에 해당 호환 가능한 JRE가 있기 때문에 버전이 안 맞는 문제가 없긴 하다.
  • 원한다면 JRE, JVM, JDK 모두 다 다른 버전 다운이 가능하다.

3. JVM

  • Java Virtual Machine의 약자로 자바 바이트 코드를 실행시키는 주체이다.
  • JRE가 JVM의 실행을 위한 여러 자바 라이브러리와 + JVM을 담고 있는 것이라면 JVM은 실제 바이트 코드를 실행시키기 위함이라고 생각하면 된다.
  • JVM의 경우엔 JRE에 담겨져 온다.
  • 바이트 코드를 OS 종류에 상관 없이 이해할 수 있게 해주는 기능을 JVM이 한다.
  • OS에 종속적이지 않고 자바 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행이 가능해진다.

JVM의 역할

.java 코드 자체를 컴퓨터는 이해할 수 없다. 이를 기계가 이해할 수 있게 하기 위해서 컴파일러를 이용해서 기계어로 자바 코드를 컴파일 해주어야 한다.

컴파일러가 자바 코드를 .class 바이트 코드로 변환해줬다면 OS에서 해당 바이트 코드를 이용해서 프로그램을 실행시켜야 한다. 이때 JVM은 OS 종류에 상관 없이 해당 바이트 코드를 이해할 수 있도록 해석해주는 역할을 한다.

정리를 하자면 바이트 코드를 JVM 위에서 OS 상관 없이 실행시킬 수 있게 하는 것이 JVM의 역할이다.

Java EE

  • 자바를 이용한 서버 개발을 위한 환경(=플랫폼)을 Java EE라고 한다.

[C#과 닷넷을 이용해서 서버를 구현하고 있는 상황을 예시들어보자]

  • 위의 경우엔 windows 플랫폼에 최적화되어 있습니다. 다른 플랫폼에서의 배포를 해야 하는 상황이라면 추가적인 작업이 필요하게됩니다.
  • 이런 상황에 JVM을 이용해 해당 문제를 해결한 Java를 이용한 서버 구현이 등장하고 이는 한 플랫폼에 종속적이지 않은 장점이 있다.
  • 또한 자바를 이용한 서버 구현의 경우엔 리눅스 기반의 서버 안정성을 보장하고 있어서 JAVA를 이용한 구현이 선호되고 있는 추세이다.

자바에서 문자열 비교를 진행할 때 equals()를 사용하는데 해당 메서드는 어디에 존재하고 있을까?

  • String 내에서 존재하는 메서드로 String은 객체 생성 없이 사용이 가능하다. 특수한 경우로 기본 타입처럼 사용이 된다.
profile
즐겁고 괴로운 개발😎

0개의 댓글