본문 바로가기

it관련

C 언어 와 Java 의 역사

반응형


프로그래밍 언어의 역사를 간단하게 설명함으로써 C언어 와 자바의 차이점을 설명드리겠습니다.  

참고로 개발자의 시각이 아니라 일반인의 시각으로 프로그래밍 언어의 역사와 차이를 언급하겠습니다.

       

우선 컴터는 기계어라고해서 지들끼리의 통신방식은 무조건 0 과 1 입니다.

0 은 전기가 안통하는것 즉 Off 이고 1 은 전기가 통하는것 즉 On 입니다.

이러한 전기신호의 조합을 컴터 CPU 에서는 0 과 1로 통신하는 방식으로 인간이 수행하고자 하는것을 이 기계어로 변환하여 수행합니다.

간단하게 말하자면 인간에게 0 과 1 은 컴터에게는 0 과 1 이 아니에요.

우리가 키보드에서 0 과 1 을 입력하여도 컴터에게는 그게 45, 98 등 완전히 다른 숫자로 인식합니다.

이것을 아스키코드라고 하는데 아스키코드표가 따로 있으니 한번 보시면 컴터가 어떻게 키보드의 숫자를 인식하는지 알 수 있습니다.

 

이렇게 0 과 1을 입력해서 컴터에 작업 명령을 내려야 하는데 1950년대 컴터가 처음 발명되었을때는 소프트웨어라는 개념도 없고 당연히 프로그래밍 언어라는것도 없었습니다.

인간이 컴터로 작업을 하려고 하면 페치베이라고 해서 옛날 전화국에서 사용하던 어마어마하게 큰 연결보드에 일일이 연결선을 여기저기 꼽아서 컴터로 작업을 했지요. 


그러나 이렇게해서 생기는 문제는 사람이 어떤 새로운 작업을 수행하려고 할때마다 일일이 수작업으로 연결선을 다시 배열해서 꼽아야했습니다.

예를들어 워드작업을 하다가 엑셀작업을 하려면 일일이 컴터 연결선을 재배열한다고 생각해보세요.

그게 한 몇 십개, 백개 정도되면 그나마 인력으로 할 수 있지만 몇 천, 몇 만개의 조합으로 컴터 연결선을 새로운 작업할때마다 다시 배열해서 연결한다는 것은 불가능 합니다.    

컴터가 프로그램을 동작할때는 몇 백, 몇 천만개의 0 과 1 의 조합으로 프로그램 동작을 수행하는건데 그걸 인간이 하드웨어적으로만 할 수 있는거는 불가능하고 또한 인간이 기계들이 인식하는 수천만가지의 기계어 조합을 이해하고 직접 일일이 모두 입력 할 수 도 없습니다.

  

그래서 나온게 소프트웨어인데 존 폰 노이만 이라고 아인쉬타인보다 더 똑똑하고 천재적이라는, 소위 반인반신이라는 소리까지 들었던 천재 수학자가 소프트웨어의 개념을 컴터에 도입하고 이 때 RAM 이라는게 컴터의 필수 구성부품이 된겁니다.  결국 프로그래밍은 RAM 을 어떻게 관리하고 RAM 에서 어떻게 CPU 가 동작을 할 수 있는가를 지정하는 중요한 역할을 담당하게 된겁니다.

존 폰 노이만 이전의 컴터는 사람이 일일이 물리적으로 기계신호를 어마어마하게 큰 페치베이에서 일일이 수작업으로 변경하였지만, 존 폰 노이만의 이론으로 램이라는 가상 페치베이를 컴터에 집어넣고 그것을 소프트웨어적으로 새로운 작업을 수행할때마다 간단하게 변경할 수 있게 만들고 컴터의 사이즈를 혁신적으로 작게 만들 수 있게 된 계기가 된거죠. 이러한 존폰노이만 방식이 우리가 사용하는 지금의 피씨와 노트북에도 그대로 적용되고 있습니다.

  

이렇게 소프트웨어를 도입해서 컴터작업을 수행하는게 한결 수월해졌지만, 아직도 인간에게는 기계어로 컴터를 사용하기에는 너무 복잡하고 어려웠습니다. 그래서 나온게 어셈블리 언어 이지요.

숫자와 영문 알파벳의 조합으로 수천만개의 0 과 1의 조합인 기계어를 더욱 간략하게 어셈블리 언어로 변환하여 사용할 수 는 있었지만 아직도 숫자와 알파벳의 몇 백만개의 조합으로 만들어야되는 어셈블리 언어는 사람이 직접 사용하기는 굉장히 어려웠습니다.

(참고로 존폰노이만은 다른 연구원들이 어셈블리 언어가지고도 쩔쩔맬때 혼자서 기계어를 완벽히 이해하고 기계어를 직접 컴터에 입력하여 사용했다고 합니다.)

 

이렇게 기계어와 어셈블리어가 인간의 언어와는 다르게 말그대로 기계들이 인식하는 수천만가지의 전기신호 On & Off 조합만을 보여주는 이러한 기계적인 언어들을 획기적으로 개선시켜서 그래도 더욱 인간의 언어에 가깝게 만든게 C 언어입니다.

C 언어 이전에도 코볼, 포트란 기타 등등 어셈블리 언어를 컴파일하여 사용하기 편하게 만드려는 프로그래밍 언어는 존재했습니다. 그러나 데니스리치라는 사람이 C 언어를 만들고 나서 세상이 바뀌었습니다.

     

말그대로 C 언어는 컴터 프로그래밍 언어의 훈민정음, 한글창제에 버금가는 대단한 발명이라고 볼 수 있습니다.

       

어셈블리 언어를 최대한 효울적으로 컴파일하며 하드웨어에 직접적으로 명령을 빠르게 수행할 수 있고 기계어와 인간의 언어 중간선상에서 두 언어 모두에게 제일 가까운 프로그램 언어로써 컴터작업을 빠르게 수행할 수 있게 되었습니다.  지금도 C 언어는 사용되고 있고 제일 중요한 컴언어 입니다.

몇 몇 사람들은 C언어를 어셈블리 언어로 착각하기도 하는데 그만큼 기계어에 제일 가까우며 하드웨어 동작을 제일 빠르게 직접적으로 제어 할 수 있는 언어이기 때문이라 더욱 그렇습니다.

 

그러나 갈수록 소프트웨어가 복잡해지고 하드웨어의 성능이 비약적으로 발전하면서 C언어로 작업 할 수 있는 분야에 한계가 생기기 시작했습니다.  C 언어는 소위 절차지향적 언어라고 하며 무조건 컴터가 명령어를 입력한 순서 그대로만 작업을 수행할 수 있게 말그대로 절차지향적으로만 업무를 수행할 수 밖에 없는 언어입니다.  그래서 자바나 C++ 같이 객체지향적인 언어에서 A4 용지 한 두장 정도의 코딩이면 되는 업무도 C언어를 사용하면 A4 용지 몇 십장 분량의 장황한 코딩을 해야되는 경우도 많고 코딩이 많아지면 많아질수록 그만큼 버그도 많이 생기고, 또한 절차지향적 언어로는 수행이 안되는 작업도 생기게 되었습니다.


그래서 그당시 뛰어난 프로그래머들이 C언어를 발전시켜서 만든게 객체지향 언어인 C++ 입니다.

스마트폰이나 태블릿PC가 나오기 이전의 소프트웨어는 거의 모두 C++ 을 사용해서 만들어졌다고 할 수 있을 정도로 C++ 은 광범위하게 대중화되었고 소프트웨어의 발전을 몇 차원 더 올릴 수 있게 되었습니다.

객체지향 언어에대해서 진짜 아주 간단하게 설명하면 자신이 코딩한 여러 소스코드나 라이브러리등을 모두 별도의 Class 로 인식하게 만들어 이 여러가지의 클라스들을 다양한 객체로 인식하여 언제든지 이러한 클라스들을 조합하여 업무를 수행할 수 있게 만든게 객체지향 언어 입니다.

C 언어에서는 불가능한 기능이었고 C 언어에서는 클라스라는 개념도 없었습니다.

이걸 가능하게 만든게 C++ 이나 자바 같은 객체지향 언어들이고 과거에 C언어로 코딩을하면 A4 용지 몇백장규모로 작업해야 했던 업무를 단 몇 십장 정도의 코딩으로 가능하게 만들면서 더욱 다양한 기능의 소프트웨어들을 프로그래밍 할 수 있게 만들게 되었죠. 

 

그렇게 C++ 이 광범위하게 사용되었다가 C++ 언어 자체에 이런저런 문제점과 모순들이 많이 발견되었습니다.     

자세히 설명하기에는 너무 복잡하고 전문적인데, 아주 간단히 설명하자면 C++을 사용하는게 컴터 메모리관리에 몇 몇 치명적인 문제라기 보다는 약점들이 생기고, 아주 비효율적인 부분들이 지적되게 되었습니다.

그래서 이것을 개선하려고 만든게 Java 라는 새로운 객체지향 언어입니다.

    

Java 는 옛날에 썬마이크로? 인가 하는 회사에서 만들었는데 오라클에 인수되면서 오라클의 막강한 자금력으로 오라클이 전폭적으로 자바를 밀게되었습니다.

자바는 분명히  C 나 C++ 에 비해서 많이 개선되고 좋은 기능이 많은 컴언어이지만 너무 인간의 편의성과 인간의 언어에 가까워지다보니 C언어나 C 계열의 언어보다는 하드웨어에 반응하는 속도가 느려서 C++ 보다 많이 사용되지는 않았습니다.

 

그러다가 스마트폰 안드로이드가 자바로 만들어진 OS 이다 보니 모바일 시장이 열리면서 자바가 압도적으로 현재는 광범위하게 사용된것 입니다. 

반응형

'it관련' 카테고리의 다른 글

스레드란  (0) 2017.05.14
데이터베이스의 특징  (0) 2017.05.14
RepRap 프로젝트  (0) 2017.05.13
프로세스의 개요  (0) 2017.05.12
프로세스의 상태  (0) 2017.05.12