본문 바로가기
개발관련/JAVA

JAVA) 자바의 작동 원리

by joa-yo 2019. 7. 15.
반응형

이클립스 툴은 이용할 줄 알지만, 자바를 잘 모르신다구요?

자바를 처음 접하는데 자바가 무엇인지 모르겠다구요?

그렇다면 이번 포스팅이 도움이 될 것 같네요. 자바가 어떻게 소스코드를 실행하는지 과정에 대한 과정을, 너무 deep 하지 않게 설명해드리겠습니다!


자바는 '운영체제에 상관없이 사용될 수 있는 언어'라는 말을 들어보셨나요? 가상머신을 사용하여, 운영체제의 도움없이 자체적으로 메모리를 할당하여 프로그램이 운영될수 있도록 합니다. 또한 바이트 코드를 만든 뒤 프로그램을 실행하기 때문에 여러 운영체제에서도 사용이 될 수 있는데요 그 이유는 무엇일까요?

JAVA의 작동 원리

자바의 작동원리를 간단하게 말씀드리겠습니다. java compiler는 소스파일을 컴파일하여 바이트코드로 변환시켜줍니다. 그리고 자바 가상머신은 필요한 때에 바이트 코드를 분석하여 주기억장치(메모리)에 올려줍니다. 이러한 과정을 통해서 소스파일이 실행될 수 있습니다. 잘 이해가 안가실 수 있으니 이클립스를 통해서 설명하겠습니다.

 


 

소스파일

소스파일은 사람이 작업하거나 읽기 쉽도록 쓰여진 문서입니다. 그렇다면 소스파일은 무엇이고 어떻게 생겼을까요? 이클립스에서 소스파일을 생성해보겠습니다. 

소스파일 생성하기 1

이클립스를 켜시면 왼쪽에 지정한 워크스페이스 파일들이 보입니다. 여기서 마우스 오른쪽 버튼을 클릭하신 후 [New]-[Class]를 선택합니다.

소스파일 생성

경로와, 패키지명, 클래스명을 입력하고 클래스를 생성하면 

소스파일 생성 직후

위와 같이 파일이 생성됩니다. 클래스 파일을 생성하였지만, 실제로 생성되는 파일은 소스파일(.java)입니다. 

소스 코드 작성

소스파일은 사용자가 읽거나 수정하기 쉬운 코드로 작성이 되며 작성 후 컴파일을 하면, 클래스 파일이 생성됩니다. 아래의 경로를 보시면 소스파일은 src 폴더 하위에 있지만, 클래스 파일은 build폴더 하위에 생성되는 것을 확인할 수 있습니다. 해당 경로에 들어가 클래스 파일을 열어보면 파일을 제대로 볼 수 없습니다. 기계어로 번역되어 있기 때문에 이클립스 확장 프로그램을 설치하거나 다른 방법을 사용하여 열어야 합니다. 

  • 소스 파일 경로   : [지정한 워크 스페이스]\BBS\src\user
  • 클래스 파일 경로 : [지정한 워크 스페이스]\BBS\build\classes\user

 

 

바이트 코드

[클래스 파일과 실행]

바이트 코드로 작성된 클래스파일(.class)은 기계가 읽기 편하도록 만들어 놓은 파일입니다. 이 파일을 JVM이 읽어들여 실행합니다. 이 때, 클래스 파일을 실행하기 위해 필요한 모든 class 파일을 불러들이고 코드를 검증한 뒤 메모리로 올리는 작업을 합니다. 만약 클래스가 없거나 오류가 있다면 오류가 발생하고 그렇지 않다면 정상적으로 실행됩니다. 

 

[클래스 파일과 이클립스]

클래스 파일은 이클립스에서 소스파일을 생성하거나 저장할 때 이클립스에서 자동으로 생성 및 변경해줍니다. 사용자가 해야하는 컴파일 과정을 "이클립스"라는 툴로 간편하게 실행할 수 있는 것입니다. 실제로 사용자가 자바를 이용해 컴파일을 하려면, CMD창에서 "javac 파일명.java"를 입력하여 필요한 파일을 컴파일해주어야 합니다. 이러한 과정을 이클립스가 대신 해줌으로써 개발자는 편하게 작업이 가능합니다.

 

[클래스 파일과 웹 프로젝트 ]

웹에서는 사용자의 요청이 있을 때, 클래스 파일이 있는지, 소스파일이 변경되었는지 확인을 합니다. 클래스 파일이 없으면 컴파일하여 클래스 파일을 생성하고, 소스파일이 변경되었으면 클래스 파일을 다시 생성합니다. 이렇게 생성된 클래스 파일을 사용하여 사용자의 요청을 처리하는데 사용합니다. 하지만, 자바는 한 번 실행되었던 클래스 파일을 캐싱하여 사용하므로 소스파일을 변경해도 클래스 파일은 기존의 것을 사용하는 경우가 있습니다. 이러한 경우에는 서버를 재실행하거나, 다른 방법을 찾아야 합니다.

 


 

이번시간에는 자바의 작동원리에 대해 알아보았습니다. 추가하면 좋은 내용이나 피드백이 있다면 언제든 환영입니다. 읽어주셔서 감사합니다^^

반응형

댓글