컴파일러란 무엇입니까? - 1

"안녕, 아미고. 난 한스 누들 교수라고 해. 난 여기 '걸랙시 러시'호 과학위원회 소장을 맡고 있지. 네가 자바 프로그래밍을 배울 수 있게 최선을 다하는지 감독한단다."

"안녕하세요, 누들 교수님."

"왜 자바가 아주 멋진 프로그래밍 언어인지 설명하고자 한다.

"타의 추종을 불허하는 자바의 이점은 플랫폼 독립성이란 말을 여러 번 듣게 될 거다. 그게 뭐고 뭐하는데 쓰냐고 물을 거지? 간접적으로 접근해 볼게."

"컴퓨터는 가장 단순한 숫자 명령만 실행할 수 있어. 우리는 개를 훈련시킬 때 '따라 와', '악수' 등의 명령어를 말해 우리가 원하는 것을 개가 하도록 하잖아."

"그런데 컴퓨터의 경우는 그런 명령어의 역할을 숫자가 한다고 보면 돼. 명령어는 모두 특정 번호 또는 코드(기계 코드라고도 함)로 나타낸다."

"그런데 숫자만 사용하여 프로그램을 작성하는 것은 정말 어려워서 사람들은 프로그래밍 언어컴파일러를 발명했어. 프로그래밍 언어는 인간과 컴파일러 모두가 이해할 수 있는 언어야. 컴파일러는 프로그래밍 언어로 작성된 프로그램을 일련의 기계 코드로 변환하는 특수한 프로그램이지."

"일반적으로 프로그래머는 프로그래밍 언어로 프로그램을 작성하고는 컴파일러를 실행하지. 이 실행 과정을 통해 프로그래머가 작성한 프로그램 코드 파일을 기계 코드로 된 단일 파일, 즉 최종(번역된) 프로그램으로 변환된 파일이 생성되는 거야."

  •  C++ 프로그램
  • 컴파일러
  • 기계 코드

"결과 프로그램은 컴퓨터에서 즉시 실행할 수 있어. 나쁜 소식은 최종 프로그램 코드가 프로세서와 운영 체제에 크게 의존한다는 거야. 그러니까 Windows에서 최종(번역된) 프로그램이 Android 스마트폰에서는 작동하지 않을 거란 의미지."

"그럼, 제가 안드로이드에서 프로그램을 작성해서 컴파일러를 실행해 번역된 프로그램도 윈도즈에서 작동하지 않겠네요?"

"그렇지."

"알 것 같아요."

"그런데 자바는 훨씬 더 혁신적인 접근법을 사용해."

  • 자바 프로그램
  • 자바 컴파일러
  • 특수 플랫폼 독립 코드(바이트코드)
  • JVM
  • 기계 코드

"자바 컴파일러는 클래스 전부를 하나의 기계 코드 프로그램으로 번역하는 대신, 클래스마다 독립적으로 번역하고, 게다가 기계 코드가 아닌 특수 중간 코드(바이트코드)로 번역해 놓고 해당 프로그램이 시작되면 바이트코드를 기계 코드로 번역하지."

"그럼, 프로그램이 실행되고 있을 때는 누가 프로그램을 기계 코드로 번역하죠?"

"자바 가상 머신(JVM)이라는 특수 프로그램이 있는데, 바이트코드 프로그램을 실행해야 할 때는 반드시 JVM을 먼저 시작해야 해. JVM은 바이트코드 프로그램이 실행되기 전에 바이트코드를 기계 코드로 번역할 거야.

"흥미롭군요. 왜 그렇게 해야 하죠?"

"그건 막강한 접근법으로 자바가 완전히 장악하는 이유 중 하나지."

"이런 접근법 덕분에 자바로 작성된 프로그램은 컴퓨터, 스마트폰, ATM, 토스터, 심지어 신용 카드 등 거의 모든 기기에서 실행할 수 있거든!"

"멋져요!"

"이 접근법에는 많은 이점이 있어. 그래서 Android 프로그램이 모두 자바로도 쓰여지는 거고. 휴대전화 산업이 빠르게 성장하는 덕분에 자바는 다음과 같은 프로그래밍 영역을 장악하고 있지.

1) 엔터프라이즈: 은행, 기업, 투자 펀드 등 서버 중심의 대규모 애플리케이션

2) 모바일: 모바일 개발(스마트폰, 태블릿), Android 덕분.

3) : PHP가 선두를 달리지만 자바는 시장 점유율을 굳건히 확보했죠.

4) 빅데이터: 무수한 서버로 구성된 클러스터 내 분산 컴퓨팅

5) 스마트 기기: 스마트 홈, 전자 기기, IoT 냉장고 등에 적용하는 프로그램"

"자바는 단순한 언어가 아니라 일종의 생태계로, 프로그램에서 사용할 수 있는 수백만 개의 기성품 모듈, 도움이나 조언을 얻을 수 있는 무수한 온라인 커뮤니티와 게시판으로 이루어져 있지."

"자바로 프로그램을 작성하면 할수록, '어째서 자바여야 하지?'라는 질문에 대한 답을 더 많이 찾게 될거야. 오늘은 여기까지!"

"감사합니다, 교수님. 정말 흥미롭고 고무적인 레슨이었습니다."