자바 1. 컴퓨터, 자바의 탄생, 그리고 현재

Bluewiz_YSH·2022년 6월 26일
0

모든 사람이 알다시피 컴퓨터로 프로그램을 만드는것을 프로그래밍이라고 하고 이 일을 하는 사람을 프로그래머라고 한다, 또다른 단어로는 개발자라고 하기도 하고. 그럼 프로그램은 정확히 무엇이고 컴퓨터는 어떻게 사람이 만든 프로그램을 인식하고 실행하는걸까?

애초에, 컴퓨터는 우리 사람말을 알아듣지 못한다. 지금 다루고 있는 컴퓨터 본체 안을 한번 보면 반도체로 이뤄진 수많은 기판과 부품들이 전기를 공급받아 열심히 돌아가는게 보일것이다. 사실 정말 간단히 말하자면 그 기판들과 부품들에서 어떤것은 전기가 흐르면서 작동을 하는 상태이기도 하고 어떤것은 전기가 아예 흐르지 않기에 작동을 멈춘 상태이기도 하다.

전기가 흐르거나 흐르지 않는 상태, 그걸 전구로 비유하자면 불이 켜진 상태와 꺼진 상태, 즉 0과 1로 이뤄진 2진수의 계산 속에서 수만 수십만 수천만의 부품들이 각각 정해진 프로그램에 따라 작동하고 우리는 그런 작동을 키보드나 마우스를 이용해 입력시켜 다시 그 연산 결과를 우리는 모니터나 스피커 혹은 프린터 등 출력하는 기기로부터 전달받는것이다.

즉, 컴퓨터는 0과 1로 이루어진 2진수 안에서만 어떤것을 인식하고 작동한다는 것이다. 그럼 우리가 키보드로 어떤 것을 입력했을때 컴퓨터는 그걸 어떻게 인식하고 처리하는지 궁금할것이다. 그것은 프로그램 내 컴파일러(Compiler)가 하는 것이다.

만약, 내가 키보드와 마우스를 사용해서 계산기 프로그램을 열고 컴퓨터에게 특정 계산식을 입력하고 연산 처리를 맡겼다고 가정하자. 일단 내가 화면에 입력한 특정 계산식과 이 계산식을 연산 처리하고 그 결과값을 출력/반환하라는 명령어는 소스 코드, 사람이 이해할수 있는 언어, 프로그래밍 언어, 고급 언어라고 한다.

그럼 이 상태에서 결과값을 알기위해 프로그램을 실행하면 프로그램이 자동적으로 컴퓨터가 이 소스코드를 이해할수 있도록 컴퓨터가 알 수 있는 언어로 바꿔주는 컴파일 프로그램, 즉 컴파일러가 실행되고 소스 코드는 즉시 0과 1로 이뤄진 2진수 기반 컴퓨터 언어로 번역되어 컴퓨터는 이걸 받아 연산 처리를 실행하고 결과값을 출력/반환한다. 이것이 현재 컴퓨터에서 프로그램이 만들어지고 실행되는, 간단한 과정이라고 할 수 있다.

그래서 사람에게 더 친화적이고 사람이 이해할수 있는 프로그래밍 언어는 고급 언어, 반대로 컴퓨터에게 친화적이고 사람이 이해하기 힘든 프로그래밍 언어는 저급 언어, 어셈블리 언어 (Assembly Language)라고 한다.

그렇게 컴퓨터와 프로그램 그리고 사람이 어떻게 서로 주고 받는지 알았다면, 그럼 왜 하필 여태까지 생겨난 프로그래밍 언어들도 많은데 그 중에 왜 자바가 아직도 주목받는걸까? 그건 자바의 가장 큰 특성이자 장점인 어떤 언어보다 객체 지향적이라는 점에 있다.

산업혁명이 일어나고 컴퓨터 붐이 일면서 이제 드론, AI등 4차산업혁명을 앞 둔 현재, 지금까지 수많은 기계들과 프로그래밍 언어도 생겨났다. 과거에는 기계 기계마다 제조사 혹은 그 당시 개발환경이 달랐기에 프로그램 또한 여러가지 언어로 제작되었고 그 당시 프로그램을 만들려면 그 기계가 다룰 언어에 맞게 일일이 따로 따로 제작해야했었다. (그 당시 C,C# 주언어, 1970-1980년대 사용)

그래서 이 불편함을 없애기 위해 1991년 당시 썬 마이크로 시스템즈(현 오라클이 인수)의 제임스 고슬링과 그의 팀이 자바 언어를 만들기 시작했고 1995년에 세간에 첫 버젼 1을 공개하면서 현재 업데이트를 거쳐 오픈 소스로 누구나 쓸수 있게끔 공표되었었다. (자바라는 이름은 제임스 고슬링과 그의 팀원들 이름의 앞자리만 따서 만들었다는 설도 있고 그와 그의 팀이 자주 마시던 커피 이름이 자바 커피라서 그렇게 됐다는 설도 있다.)

그래서 결국 자바에게 있어서 다른 언어들을 제쳐두고 손에 꼽힐만한 가장 큰 장점은 바로 앞서 말한 불편함을 단번에 해결하는, 기계 기계마다 이제 일일이 프로그램을 따로 구현하지 않아도 된다는 점이었다.

자세하게 설명하자면, 먼저 자바에서는 프로그램을 만들고 그 소스 코드를 자바만의 컴파일러 프로그램으로 실행시켜 앞으로 많이 듣게될 Class 파일, 즉 컴퓨터가 알아들을 수 있는 바이트 코드들로 이뤄진 파일을 생성한다. (Class 파일들은 jdk가 설치된 폴더의 "bin" 폴더에 저장된다)

그럼 이 파일을 바로 기계에서 실행시키는 것이 아니라 기계 기계마다 맞춤 형식인 가상 머신, 즉 JVM(Java Virtual Machine) 위에서 실행시켜 프로그램 하나, 바이트 코드 모음 하나 만으로 여러 언어를 가진 다양한 기계들 위에서 실행시킬수 있는것이다. (java의 슬로건인 Write once, Run anywhere)

자바는 이런 구조를 기반으로 전에 지배적으로 쓰였지만 기계마다 일일이 프로그램을 다시 짜야하는 C언어 체계를 빠르게 변화시켰고, 점차 고도성장하는 사회에 맞춰 복합적인 기능을 수행해야하는 기계들의 발달과 함께 수많은 기능들을 객체화ㆍ모듈화ㆍ구조화할수 있는 자바가 더 널리 쓰여진건 당연한 결과이기도 했다.

예를 들자면, 우리가 하루에 수십번도 드나들 포털사이트(네X버, 다X, 구x 등)도 검색 기능만 있는게 아니라 날씨 표시 기능, 이메일 기능, 지도 기능 등 수많은 기능들을 포함하고 있는데 자바는 이러한 기능들을 하나 하나 독립적인 기능 즉, 객체로 보고 프로그램을 설계하고 실행할때도 그렇게 정하고 있다. 이렇게 기능들을 객체로 보게된다면 기능들의 유지보수가 매우 쉬워진다. (문제가 되거나 수정해야하는 기능들만 골라서 픽스하면 되니까) 또한 나중에 새로운 기능을 추가해야할때도 기계 플랫폼 상관없이 바로 추가할수 있다. 바로 이런것이 자바의 큰 장점인 어떤 언어보다 객체지향적이라는 것이다.

그 외 장점으로는 C언어와 달리 포인터 개념이 없어져 악성 코드의 침입으로부터 자유롭고 메모리를 직접 제어하지 않아 오류가 덜 난다는 점(메모리 관리는 가비지 콜렉터 Garbage Collector) 그리고 오픈소스라 다양한 프레임워크와 기본 클래스들이 준비되어있다.

그래서 현재 자바는 공공기관에서 주로 널리 쓰이고 있고 웹,안드로이드 앱,심지어 게임까지 쓰이고 있다.(하지만 아직 게임은 C언어가 대세)

앞으로 이런 자바를 쓰고 배우기 위해 다음장에서는 자바 개발자 키트 (JDK, Java Development Kit) 설치법과 시스템 환경 변수 편집, 그리고 널리 쓰이는 자바 통합 개발 환경인 이클립스(Eclipse) 설치하는 법을 보겠다.

0개의 댓글