JAVA(객체지향언어)

이민우·2023년 5월 22일
0

내방식대로 이해한 JAVA 환경을 적어봅니다

JAVA

공통실행 환경으로 어디서나(운영체제: Window, Mac, Linux) 동작이 가능한 객체지향언어로 앱(운영체제 위에서 실행되는 프로그램)개발에 적합한 언어이다.

JVM (Java Virtual Machin)

JAVA 프로그램을 실행시킬 수 있는 가상의 기기를 만들어준다.
JVM을 통해 Winodw, Mac, Linux 와 같은 여러 운영체제 에서 JAVA 프로그램이 동작 할 수 있게 한다.

JAVA 컴파일러

JAVA 프로그램을 운영체제가 읽을 수 있는 코드로 변환해주는 역할을 한다.
.class 로 변환시켜 주고 운영체제가 읽을 수 있는 코드란 바이트코드라고 한다.

인터프리터

인터프리터란 운영체제가 읽은 바이트코드를 기기가 실행할 수 있는 기계어로 번역해준다.
추가적으로 이러한 인터프리터의 효율을 높여주는 해석기가 있는데 JIT 컴파일러라 한다.

클레스 로더

바이트코드를 메모리 영역에 담아주는 운반기로 여기서 메모리 영역은 운영체제로 부터 JVM이 할당받은 메모리 영역이다.
JVM으로 바이트코드를 불러와서 메모리에 저장한다.

가비지 컬렉터

메모리 영역에 안쓰는 데이터를 주기적으로 없애준다.

위와같은 컴파일러, 인터프리터 등 이 운영체제에서 JAVA 프로그램을 실행시키는 과정은 다음과 같다

우선 JAVA 파일을 컴파일러가 운영체제가 읽을 수 있는 바이트코드로 변환시켠준 후 클래스로더가 운영체제가 할당해준 메모리 영역에 바이트 코드를 운반해준다.
이러한 바이트 코드는 인터프리터와 JIT 컴파일러가 기계어로 번역시켜주고 JAVA 프로그램이 실행되게 된다.

JAVA언어를 배우기전 JAVA가 어떠한 흐름으로 동작하는지를 알면 코딩을 할때 실행되지 않는 에러를 만났을 경우 JAVA 프로그램이 실행되는데 필요한 파일이 없는지 와 같은 작은 에러 부터 컴파일 오류와 같은 에러 발생시 컴파일 관련한 코드가 무엇인지 확인한다는 등의 에러를 예상해 볼 수 있다.
예를 들어 자동차 수리공이 자동차가 어떤식으로 굴러가는지 알고 있고 자동차가 고장이난 상황에서 특정 소리와같은 단서로 어디가 고장난지 예상하고 고칠 수 있듯이 코딩도 흐름을 알면 어느정도 에러를 예상할 수 있다고 생각한다.
실제로 이러한 흐름을 알고 해결했던 문제들이 몇 있다.
간단한 예이지만 Eclipse를 사용하던 중 JDK를 여러개 깔아둔 상태에서 서버와 연결해 코딩하던 와중 JDK 버전이 맞지않아 에러가 나던 상황이였다. 이때 에러메세지를 기반으로 체크 후 버전 변경 후 해결할 수 있었다.
정말 간단한 문제지만 몰랐을 경우 시간을 많이 소비했을것이다.

위와 같이 흐름을 이해하면 코딩에 조금이나마 도움이 된다.

profile
개린이

0개의 댓글