본문 바로가기

컴퓨터 과학

Java에 대하여...

반응형

 최근 가장 많이 다루고 있는 프로그래밍 언어를 꼽으라면 단연코 자바(Java)를 들 수 있을 것이다. 프로그래밍을 하다보니 내가 자바에 대해서 잘 알고 있는 지 한 번쯤은 점검할 필요가 있다는 생각이 들었다. 언어의 특성을 잘 이해하고, 그에 맞추어 프로그래밍 하는 사람과 그렇치 않은 사람이 생산한 코드는 질이 달라질 수 밖에 없다. 이 글에서는 자바에 대한 전반적인 부분을 다룰 것이다.

 

 

 자바(Java)는 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍에 최적화된 프로그래밍 언어이다. 1991년 그린 프로젝트(Green Project)라는 이름으로 시작하여 1995년 에 발표되었다. 가전제품 내에 탑재되어 동작되는 Firmware를 위해 개발되었지만, 현재는 Web Application 제작을 위해 사용되는 가장 보편적인 언어이며, 안드로이드를 비롯한 모바일 기기용 소프트웨어 개발을 위해 사용되기도 한다.

 

 자바를 사용하다보면 C와 유사한 점이 많다는 것을 느낄 수 있을 것이다. 자바와 다른 프로그램밍 언어를 구분짓는 것이라 한다면 컴파일된 코드가 플랫폼과 독립적이라는 것이다. 컴퓨터는 0과 1 밖에 이해하지를 못한다. 안타깝게도 사람은 0과 1로 이루어진 디지털 언어에 익숙하지 않고, 이를 매개해줄 무언가가 필요하다. C를 비롯한 프로그래밍 언어는 사람이 실제로 사용하는 언어와 논리를 이용하여 프로그래밍을 할 수 있게 해주고, 컴파일러(Compiler)는 사람이 코딩한 파일들을 컴퓨터가 이해할 수 있는 기계어(Machine Language)로 전환해준다. 문제는 컴파일러이다. CPU와 OS의 종류에 따라 같은 컴파일된 코드라 할지라도 다르게 해석될 수 있다. 예를 들어 "00000001"라는 일련의 코드가 윈도우 체제에서는 '+'로 해석할 수 있지만 다른 리눅스 같은 OS에서는 '-'로 해석될 수도 있기 때문이다. 그래서 같은 소스 코드에 대하여 서로 다른 운영체제에서 제대로 실행하기 위해서는 각각의 OS에 맞는 컴파일러를 사용하여 컴파일을 한 파일을 사용해야 한다. 프로그램 파일을 빌드하는 일은 복잡하고 시간이 많이 소모되는 일이다. 오죽하면 개발자가 농땡이를 피우고 싶으면 우스갯 소리로 "지금 컴파일 중이야!!"라고 변명하면 된다고 하지 않는가? 이야기가 약간 옆으로 샌 것 같다. 또다른 문제점이 있다. 어쩌면 단순하게 각 플랫폼에 맞는 컴파일러로 컴파일 해주는 것으로 문제가 해결되지 않을 수 있다. 높은 확률로 코딩한 앱은 체제가 제공하는 라이브러리를 사용할 수 있을 것이고, 이는 다른 체제에서는 유효하지 않을 수 있다. 맙소사 !! 우리는 이제 소스 코드마저 체제에 맞게 손봐야 한다. 자바는 이러한 문제를 해결하기 위해 만들어졌다. 

 

 자바는 C 와 다르게 소스 코드를 바이트 코드(Byte Code)로 전환한다. 바이트 코드를 실행하기 위해서는 JVM 이라는 가상 머신을 설치해야 한다. 중요한 것은 자바가 소스 코드를 바로 기계어로 변환하여 실행파일로 만드는 방식을 채택하지 않고 중간자인 JVM 을 이용하여 프로그램을 실행한다는 것이다. JVM 에서 비로소 컴파일이 이루어진다. 바이트 코드는 JVM이 소스 코드를 컴파일할 수 있도록 반 번역된 형태라고 생각하면 편하다. 그러면 이런 의문이 들 수 있다. 결과적으로는 어쨌든 기계어로 번역하는 과정을 거쳐야 하고, 이는 플랫폼마다 달라질텐데 어떻게 이게 가능한 것인가? 당연히 컴파일이 이루어지는 JVM 은 플랫폼의 종류에 따라서 달라질 수 밖에 없다. 그러나 우리는 이 부분에 대해서 신경쓸 필요가 없다. 이미 훌룡한 개발자들이 각 체제에 맞게 설계된 JVM 을 만들어 놓았고, 일반적인 응용 프로그램 개발이 목적이라면 신경쓸 필요가 없다. 그저 프로그램을 실행할 체제에 맞는 JVM 을 설치해주고 실행하기만 하면 된다. 또한 체제간 라이브러리의 차이를 고려하지 않아도 된다. 마찬가지로 시스템에서 제공하는 라이브러리들을 사용할 수 있는 Java api 를  이미 갖추고 있고 사용자는 이에 맞추어 사용하기만 하면 된다. 

 

 자바 언어 철학을 5 가지로 정리할 수 있을 것 같다.

  1. 객체 지향 방법론을 사용해야 한다.
  2. 같은 프로그램(바이트 코드)이 여러 운영 체제(마이크로 프로세서)에서 실행될 수 있어야 한다.
  3. 컴퓨터 네트워크 접근 기능이 기본으로 탑재되어 있어야 한다.
  4. 원격 코드를 안전하게 실행할 수 있어야 한다.
  5. 다른 객체 지향 언어들의 좋은 부분만 가지고 와서 사용하기 편해야 한다.

   자바도 단점이 있다. C와 같은 언어들은 바로 기계어로 이루어진 실행파일을 만들어내며, 이는 메모리에 적재하기만 하면 바로 실행될 수 있다. 자바는 반면 바이트 코드를 가지고 실행할 때마다 매번 필요한 부분을 컴파일하면 실행하기에 속도가 느릴 수 밖에 없다. 비유를 하자면 C 가 주방에서 만들어서 가져온 음식을 내오는 일반적인 식당이라면, 자바는 미리 손질한 재료들을 눈 앞에서 조리하는 오픈 키친 컨셉의 식당이라고 볼 수 있겠다.

 

자바의 이식성 원리

 

 자바에 대해서 다루어 보았다. 글 한 편만 가지고 자바에 대해서 설명하기에는 불충분하다. 역사가 깊은 언어이기도 하고, 기본 클래스만 하더라도 설명할 것들이 많기 때문이다. 자바가 무엇인지, 왜 자바가 좋은지 이 글을 통해서 알았기를 바라며 이 글을 마친다.

 

출처 : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)

 

자바 (프로그래밍 언어) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 자바Java패러다임프로그래밍 패러다임: 객체 지향 프로그래밍 (클래스 기반 프로그래밍), 구조적 프로그래밍, 명령형 프로그래밍, 제네릭 프로그래밍, 반영, 병

ko.wikipedia.org

 

반응형