[Concepts] 프로그래밍 언어의 개요[Concepts] 프로그래밍 언어의 개요

Posted at 2019. 6. 26. 20:21 | Posted in Computer Concepts
반응형




출처 : IT CookBook, 컴퓨터 사이언스






 프로그래밍 언어의 개념



컴퓨터를 움직이게 하려면 명령을 내려야 한다.

프로그래밍 언어는 인간이 컴퓨터와 의사소통할 수 있도록 컴퓨터에 내리는 명령으로 프로그램을 처리하도록 기술한 언어를 말한다.


프로그램은 인스트럭션(Instruction)이라는 명령어로 쓰여 있고, 컴퓨터는 인스트럭션을 논리적 순서(문제를 푸는 방법)에 따라 수행한다. 하지만 2장에서 살펴본 것처럼 컴퓨터는 0이나 1로 된 2진수 형태의 기계어만 처리할 수 있으므로 인스트럭션 역시 기계어로 쓰여 있어 인간이 이해하기 힘들다. 이 문제를 해결하기 위해 인간도 쓰기 쉽고 컴퓨터도 기계어로 해석 할 수 있는 프로그래밍 언어(Programming Language)를 개발하여 사용하게 되었다.








■ 저급 언어와 고급 언어



프로그래밍 언어는 기계어와 유사한 저급 언어와 인간이 쓰는 자연 언어와 유사한 고급 언어로 나뉜다.




#01. 저급 언어


저급언어란 컴퓨터 내부 표현에 가까운 언어로 기계어와 어셈블리어로 나눌 수 있다.

기계어는 0과 1로 작성하고, 어셈블리어는 기계어를 인간이 이해하기 쉽도록 기호홀 표현하여 작성한다.



◎ 기계어 ( Machine Language) 


기계어는 0과 1로 된 2진수 형태의 언어이다.

인간이 이해하기 어려울 뿐만 아니라 하드웨어 주소 체계에 따라 배열이 달라져 컴퓨터 끼리 호환되지 않는 문제가 있어 지금은 거의 사용되지 않는다.



◎ 어셈블리어 ( Assembly Language )


어셈블리어는 기계어 명령을 알기 쉬운 기호로 표시하기 떄문에 기계어는 물론 사용하고자 하는 컴퓨터 내부 구성과도 관계가 깊다.

예를 들어 LDA A라는 어셈블리어 코드는 메모리 A번지에 있는 내용을 누산기 accumulator에 저장하라는 의미로, 기계어 010100000000100에 해당한다.

다음은 A ∨ B 수식을 ( A' ∧ B' )형태로 치환해 계사한 어셈블리어의 예이다.



  LDA A 

 // A번지에 있는 데이터 값을 로드한다.

  CMA

 // 위의 값을 보수( A' )로 바꾼다.

  STA TMP

 // 위의 값을 임시 저장소에 저장한다. 

  LDA B

 // B번지에 있는 데이터 값을 로드한다.

  CMA

 // 위의 값을 보수( B' )로 바꾼다.

  AND TMP

 // AND( A' ∧ B' ) 계산을 수행한다.

  CMA

 // 계산 결과를 보수화하여 ( A ∨ B ) 결과 값을 얻는다.



어셈블리어는 기계어에 비해 간편하게 쓸 수 있지만 기계어인 0과 1의 집합을 문자나 기호로 바꾼 것에 불과하므로 하드웨어 구조에 익수한 사람이 아니면 쓰기 어렵다.

그럼에도 불구하고 주기억 장치, 레지스터, 마으코르포르세서, 입출력 포트 같은 컴퓨터의 하드웨어 장치를 직접 제어할 때는 매우 유용하다.




#02. 고급언어



사용자의 요구 수준이 높아지고 컴퓨터 기술이 발달하면서 다양한 고급 언어가 개발되었다.

고급 언어는 하드웨어의 기술적 요소를 구체적으로 몰라도 쉽게 작성하고 수정할 수 있다.


고급언어의 특징은 다음과 같다.


일상 언어에서 사용하는 표현을 그대로 가져다 쓸 수 있다.

예를 들어 +는 덧셈, -뺄셈으로 상요한느 등 일반적으로 사용하는 단어나 표현을 그대로 쓴다.


기계어나 어셈블리어를 쓰려면 기억장치에 데이터를 읽거나 쓸 때 기억 장소의 주소를 정확히 알아야 한다.

이에 비해 고급 언어는 번지 대신 변수 이름으로 기억 장소에 접근하므로 사용자가 기억 장소의 주소를 일일이 기억할 필요가 없다.


명령어 하나로 다수의 동작을 지시한다.

예를 들어 X = Y + Z × W 명령어는 Z와 W를 먼저 곱하고 그 결과를 Y에 더해 X에 대입하라는 뜻이다.

이처럼 하나의 명령어로 다수의 연산을 실행한다.


다음 그림은 고급 언어로 작성한 프로그램을 실행하는 과정이다. 프로그래머는 먼저 고급 언어와 같은 프로그래밍 언어를 이용해 원시 코드를 작성한다. 그 다음 번역기(컴파일러)가 원시 코드를 목적 코드로 번역한다. 여기서 목적 코드는 긱어로 된 프로그램으로 컴퓨터가 바로 실행할 수 있는 상태의 프로그램 코드이다. 목적 코드는 메모리로 옮겨져 실행되고 결과물을 계산해 낸다.




※ 프로그램 작성과 실행과정





종류에 따라 다르지만 고급 언어는 다음과 같은 형식적인 규칙이 있다. 이를 프로그래밍 언어의 문법 구조(Syntax)라 한다.


어떤 구조와 순서가 있다.

특별한 기호를 사용한다.

언어에 따라서는 마침표( . )나 세미콜론( ; ) 등을 사용한다.


대표적인 고급 언어로는 C언어를 비롯해 포트란(FORTRAN), 코볼(COBOL), 파스칼(PASCAL), C++, 자바(JAVA), 스몰토크(SMALLTALK) 등이 있다.





#03. 프로그래밍 언어의 발전


나라마다 사용하는 언어가 다르듯 프로그래밍 언어도 수백 종 이상이 개발되어 사용되고 있다. 언제 개발되었고 어떻게 발전되어 왔는지 살펴보자.



① 1950년대 언어


이전까지 기계어로 작성하던 프로그램을 1950년대 초에 처음으로 어셈블리어로 작성하였다.

어셈블리어는 기계어인 0과 1을 인간이 이해하기 쉬운 코드로 바꾸어 기계어보다 작성하기 쉬웠지만, 하드웨어 위주의 언어라는 제약이 따랐다.

그러던 중 과학 분야의 복잡한 계산을 수행하기 위해 포트란(FORTRAN, FORmula TRANslator)이 개발되었다.

포트란은 프로그래밍 언어가 발전하는데 새로운 이정표를 세웠다.



② 1960년대 언어


포트란을 발전시킨 과학기술용 고급 언어가 잇따라 개발되었고, 사무 처리용 고급 언어도 개발되었다.

대표적인 사무 처리용 언어가 코볼(COBOL, COmmon Business Oriented Language)이다.

코볼은 미국 국방성이 후원하여 컴퓨터 제품 간의 호환성 문제를 해결하기 위해 개발한 것으로, 수차례의 수정과 보완을 거쳐 사무 처리용 언어로 확고히 자리를 잡았다.

포트란 같은 과학기술용 언어는 프로그램을 수학적 푝법을 사용하여 작성하는데 반해, 코볼은 영어에 가까운 구문을 사용하기 때문에 작성하기도 편하고 이해하기 쉽다는 장점이 있다.

1960년대 포트란과 코볼의 장점을 살린 하이브리드 형태인 PL/I(Programming Language One)이 등장해 관심을 크게 끌었지만, 오늘날에는 코볼에 비해 사용 빈도가 낮은 편이다.



③ 1970년대 언어


하드웨어 가격이 떨어지고 소프트웨어가 복잡해지면서 프로그래밍 언어 역시 소프트웨어 중심으로 비중이 옮겨가기 시작했다.

소프트웨어의 복잡성과 관리가 중요한 쟁점으로 떠오르면서 더 강력하고 새로운 개념의 언어가 필요해졌다.

이렇게 개발된 언어가 C언어와 파스칼(PASCAL)이다.


C언어는 원래 시스템 소프트웨어를 개발하는 언어였지만 다양한 종류의 컴퓨터에 이식할 수 있다는 점 때문에 현재까지도 여러 분야에 두루 사용되고 있다. 실제로 수많은 워드프로세서, 스프레드시트, 그래픽 프로그램, 게임 등이 C언어로 제작되었다.

유닉스 운영체제가 등장하면서 C언어의 인기가 날로 높아졌는데 이것은 비트 연산과 같은 저급 언어 기능을 갖추고 있어 빠르고 효율적이기 때문이다.

물론 이후 등장한 언어에 비해 배우기가 어렵고 보고서 작성이나 데이터 파일 조작이 많은 업무에는 부적합하다는 단점이 있다.


파스칼은 프랑스 수학자인 파스칼(Pascal)의 이름에서 따온 언어로, 1969년에 스위스 취리히 공과대학의 니클라우스 위스(Niklaus Wirth) 교수가 개발했다.

파스칼은 당시 유행한 구조적 프로그래밍에 적합한 언어이기도 했고, 쉽게 배울 수 있는 것은 물론 이공계 및 과학계 종사자가 주로 사용하는 그래픽 처리 기능 또한 뛰어나 많은 사람에게 주목을 받았다.

하지만 대화식 입출력이나 사무 처리 분야에 응용하기엔느 부족했고, C언어에 비해 사용자를 크게 늘리지 못하면서 1990년대 중반 이후에는 인기가 시들해졌다.



④ 1980년대 언어


본격적으로 컴퓨터 하드웨어 가격이 떨어지면서 개인용 컴퓨터와 중앙 컴퓨터가 연결된 단말 시스템을 이용한 분산 처리 개념이 확산되었다.

이러한 이유로 학생들과 컴퓨터 초보자들도 쉽게 배울 수 있는 교육용 언어가 필요해졌고 이때 등장한 언어가 베이직(BASIC)이다.

베이직은 쉽게 배울 수 있고 중앙 컴퓨터와 연결된 단말 시스템에서 처리하는 시분할 시스템(Time Sharing System)운영 에 적합한 기능을 가지고 있어 많은 인기를 끌었다.

다만 비교적인 측면이 있어 소프트웨어 규모가 커질 수록 관리하기 번잡해지고 운영이나 유지가 많이 어렵다는 단점이 있었다.

이후 이러한 단점을 개선한 퀵 베이직(Quick Basic)과 비주얼 베이직(Visual Basic) 등이 등장했고 지금까지도 널리 사용되고 있다.



⑤ 1990년대 언어


객체 지향 언어가 본격적으로 등장했다.

특히 GUI(Graphical User Interface) 환경의 프로그래밍을 위한 여러 클래스의 라이브러리가 등장하면서 객체 지향 언어의 장점이 크게 부각되었다.

이러한 추세에 맞춰 C++, 자바(JAVA), 비주얼 베이직(Visual Basic)등의 객체 지향 언어가 등장했다.

이들 언어은 기존의 객체 개념을 업그레이드하고 GUI 개념을 강화하는 방향으로 더욱 발전해 나갔다.


비주얼 베이직은 베이직과 퀵 베이직을 개선하여 객체 지향 개념을 보강한 언어이다.

GUI 기능을 내세워 사용자가 쉽게 사용할 수 있어 지금까지 많이 활용된다.



⑥ 2000년대 이후 언어


2000년대에 접어들면서 사용자는 더욱 간편하고 쉬운 방법으르 프로그래밍하길 원했고 이미 개발된 프로그램을 쉽게 가져다 쓸 수 있는 소프트웨어가 나오길 기다렸다.

강화된 기능의 웹과 저렴해진 하드웨어는 이러한 사용자 요구를 만족시킬 방법을 찾아냈다.


먼저 파워빌더(PowerBuilder), 델파이(Delphi), 각종 쿼리(Query) 전용 언어 등 소위 4세대라 불리는 언어가 등장했다.

4세대 언어는 특정 상황에 맞춤식으로 사용할 수 있고, 종래의 고급 언어보다 사용하기가 쉽다.

또한 사용자에게 강화된 텍스트 환경이나 시각 환경을 제공한다.


객체 지향 프로그래밍 기법이 발전하면서 소프트웨어 모듈을 컴포넌트화하여 필요할 때마다 사용할 수 있도록 하는 소프트웨어 컴포넌트 기술도 빠르게 발전했다. 이 기술은 소프트웨어를 전자 부품처럼 통일된 인터페이스로 제작함으로써 소프트웨어(Software Factory)을 만들 수 있도록 도왔다.

소프트웨어 컴포너트는 차세대 소프트웨어 기술의 핵심 분야로 인식되면서 소프트웨어 생산성 향상을 위한 필 수 기술로 대두 되었다.


이 시기에는 객체 지향 기술과 웹이 결합하여 다양한 정보를 제공하는 기법이 발전했다.

XML(eXtensible Markup Language)과 VRML(Virutal Realiry Modeling Language) 등 각종 웹 프로그래밍 언어가 등장했다.

XML은 HTML의 한계를 극복할고 만든 언어로 다른 시스템 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고받을 수 있도록 한다.

VRML은 인터넷이나 로컬 시스템에서 3차원 개체나 세계를 표현하기 위한 파일 형식이다.

XML과 VRML은 기존 객체 지향 언어와 결합하여 인터넷에서 텍스트, 이미지, 애니메이션, 사운드 등을 비롯한 가상현실(Virtual Reality) 까지 구현할 수 있는 기술로 발전하고 있다.


최근에는 5세대 언어라 불리는 인공지능 기능을 이요해 자연 언어(Natural Language)로 직접 처리하는 기법에 대한 연구가 활발히 진행되고 있다.

음성인식 시스템이나 자동 번역 시스템 등도 이러한 기법의 일부라 할 수 있다.






※ 프로그램 작성과 실행과정









반응형
//