홈 > Community > 칼럼 및 에세이
 
작성일 : 13-07-29 10:15
[지식정보화] 프로그램밍 언어
 글쓴이 : 최고관리자
조회 : 4,240  
컴퓨터는 크게 하드웨어와 소프트웨어(프로그램)로 구성되어 있습니다. 물리적 요소인 하드웨어에 일을 시키기 위해서는 일의 순서를 미리 가르쳐 줘야 하는데, 이 순서를 ‘컴퓨터가 이해할 수 있는 언어’로 기술한 것을 ‘프로그램’이라고 합니다. 이 ‘컴퓨터가 이해할 수 있는 언어’를 ‘기계어’라고 하는데, 컴퓨터는 0과 1밖에 모르므로 당연히 기계어는 0과 1로만 이루어져 있겠죠. 실제로 확장자가 exe인 파일을 특수 에디터로 열어보면 3F2B04 ... 같은 16진수(2진수를 보기 편하게 표시) 기계어를 보실 수 있습니다. 이 0과 1들을 순서대로 32개씩(32-bit CPU), 혹은 64개씩(64-bit CPU) 읽어 와서 미리 약속된 명령어 세트와 비교해 보고, 해당 명령을 수행하는 것입니다. 그러나 아무리 유능한 사람이라도 0과 1만으로 복잡한 프로그램을 설계하고 에러를 수정하는 것은 불가능하기 때문에, 기계어와 사람의 언어를 연결해 줄 중간단계의 언어가 필요합니다. 이런 중간단계의 언어를 ‘프로그래밍 언어’라고 하며, 기계어에 가까울수록 ‘저급언어’, 사람의 언어에 가까울수록 ‘고급언어’라고 합니다.
 
프로그래밍 언어의 분류
저급언어    ─────────────────────────→    고급언어
기계어
어셈블리
Algol, BASIC, COBOL, FORTRAN, Pascal, Prolog
C, C++
Java
 
프로그래밍 언어의 Trade-off 법칙
고급언어는 사용목적에 따라 많은 종류가 있는데, 결국 컴퓨터에서 실행되기 위해서는 모두 기계어로 바뀌어야만 합니다. 이렇게 고급언어를 기계어(혹은 어셈블리)로 번역하는 도구를 ‘컴파일러’, 혹은 ‘인터프린터’라고 부릅니다.
 
문제는 이 기계어가 CPU의 종류에 따라 다르다는데 있습니다. 인텔 계열(IBM PC)의 CPU에서 컴파일한 C 프로그램은 모토롤라 계열(매킨토시)의 CPU에서 실행되지 않습니다. 반대의 경우도 마찬가지인데, 이는 CPU의 약속된 명령어 세트가 다르기 때문입니다. 그래서 소프트웨어 회사들이 프로그램을 판매할 때, 아래의 왼쪽 그림처럼 Windows용과 Mackintosh용 버전을 따로 발매하는 것이죠.
 
   
C와 자바의 차이점
 
Java의 경우는 약간 얘기가 다릅니다. Java는 JVM (Java Virtual Machine) 이라고 하는 가상의 CPU 위에서 실행되기 때문에, 각각의 OS에 맞는 JVM만 설치되어 있다면 어떤 컴퓨터에서라도 잘 실행됩니다. 다양한 시스템이 동일한 컨텐츠에 접근하는 방식인 인터넷상에서 Java로 짜여진 프로그램을 많이 만날 수 있는 것도 이런 이유입니다.
 
그러나 얻는 것이 있다면 잃는 것이 있게 마련입니다. Java로 짜여진 프로그램은 바로 실행되는 것이 아니라 JVM이라는 인터프린터를 한번 거쳐야하기 때문에, 직접 수행되는 프로그램보다 느립니다. 시스템을 가리지 않는 뛰어난 호환성을 얻는 대신, 실행 속도에서 손해를 보는 셈이죠. 이런 확장성과 성능의 Trade-off 관계는 프로그래밍 언어뿐만 아니라 컴퓨터와 관련된 대부분의 분야에서 공통적으로 발견할 수 있는 법칙입니다.