1. 프로그래밍 언어란?

프로그래밍 언어는 컴퓨터가 이해하고 실행할 수 있도록 명령을 작성하는 수단입니다. 인간이 자연어를 사용해 소통하듯이, 프로그래머는 특정한 문법과 규칙을 가진 프로그래밍 언어를 사용해 소프트웨어를 개발합니다.

오늘날에는 수많은 프로그래밍 언어가 존재하지만, 이들 모두는 특정 목적과 시대적 요구를 반영하여 발전해 왔습니다. 이번 글에서는 프로그래밍 언어의 역사적 흐름을 살펴보며, 어떤 언어들이 개발되었고, 어떤 영향을 미쳤는지 정리해 보겠습니다.


2. 프로그래밍 언어의 기원과 초기 발전

(1) 기계어와 어셈블리어 (1940~1950년대)

최초의 프로그래밍 언어는 기계어(Machine Language)였습니다. 기계어는 0과 1로 구성된 바이너리 코드로, CPU가 직접 해석하여 실행할 수 있는 언어입니다. 하지만 기계어는 사람이 이해하고 작성하기 매우 어려웠습니다.

이를 보완하기 위해 개발된 것이 어셈블리어(Assembly Language)입니다. 어셈블리어는 기계어보다 사람이 읽고 쓰기 쉬운 형태로, 특정 기계 명령어에 대해 축약된 기호(Symbol)를 사용했습니다. 그러나 어셈블리어도 여전히 하드웨어 종속적이어서, 다른 기종에서는 사용할 수 없는 한계가 있었습니다.

(2) 고급 프로그래밍 언어의 등장 (1950~1960년대)

컴퓨터가 발전함에 따라 보다 사람이 이해하기 쉬운 프로그래밍 언어가 필요해졌습니다. 이 시기에 등장한 대표적인 언어로는 다음과 같은 것들이 있습니다.

  • Fortran (1957년): 세계 최초의 고급 프로그래밍 언어로, 수학 및 과학 계산을 위한 언어로 개발되었습니다.
  • Lisp (1958년): 인공지능 연구에 많이 사용되었으며, 리스트 기반의 재귀적인 구조를 가진 언어입니다.
  • COBOL (1959년): 기업용 데이터 처리에 특화된 언어로, 은행 및 행정 시스템에서 많이 사용되었습니다.

이러한 언어들은 프로그래밍을 보다 효율적으로 만들었고, 다양한 산업에서 컴퓨터를 활용할 수 있는 기반을 마련했습니다.


3. 현대 프로그래밍 언어의 발전 (1970년대~현재)

(1) 절차적 프로그래밍과 구조적 프로그래밍 (1970~1980년대)

1970년대부터 프로그래밍 패러다임이 체계적으로 정립되기 시작했습니다. 주요 언어는 다음과 같습니다.

  • C 언어 (1972년): 벨 연구소에서 개발한 C 언어는 강력한 시스템 프로그래밍 기능을 제공하며, 현재까지도 널리 사용되고 있습니다.
  • Pascal (1970년): 교육용으로 개발된 언어로, 구조적 프로그래밍 기법을 강조했습니다.
  • Ada (1980년): 미 국방부 주도로 개발된 언어로, 대규모 시스템 개발에 적합한 언어였습니다.

이 시기의 언어들은 절차적 프로그래밍(Procedural Programming) 개념을 확립했으며, 코드의 가독성과 유지보수성을 개선하는 데 중점을 두었습니다.

(2) 객체지향 프로그래밍의 시대 (1980~1990년대)

1980년대 후반부터는 객체지향 프로그래밍(Object-Oriented Programming, OOP) 패러다임이 각광받기 시작했습니다. 객체지향 프로그래밍은 프로그램을 독립적인 객체(Object) 단위로 나누어 개발하는 방식으로, 코드의 재사용성과 확장성을 높이는 데 기여했습니다.

대표적인 객체지향 프로그래밍 언어는 다음과 같습니다.

  • C++ (1983년): C 언어에 객체지향 개념을 추가하여 개발된 언어로, 현재까지도 게임 및 시스템 소프트웨어 개발에서 많이 사용됩니다.
  • Smalltalk (1980년대): 객체지향 프로그래밍의 개념을 정립한 언어로, 이후 Java 및 Python과 같은 언어의 기반이 되었습니다.
  • Java (1995년): "한 번 작성하면 어디서든 실행 가능(Write Once, Run Anywhere)"이라는 개념으로 개발된 언어로, 웹 및 엔터프라이즈 소프트웨어 개발에서 큰 인기를 끌었습니다.

(3) 웹 개발과 스크립트 언어의 부상 (1990~2000년대)

1990년대 후반부터 인터넷이 급격히 발전하면서 웹 개발이 활성화되었고, 이에 따라 새로운 프로그래밍 언어들이 등장했습니다.

  • JavaScript (1995년): 웹 브라우저에서 실행되는 스크립트 언어로, 오늘날 프론트엔드 개발에서 필수적인 언어가 되었습니다.
  • PHP (1995년): 동적인 웹 페이지를 쉽게 개발할 수 있도록 만들어진 서버 사이드 스크립트 언어입니다.
  • Python (1991년): 가독성이 뛰어나고 다양한 용도로 활용 가능한 언어로, 현재 머신러닝 및 데이터 과학 분야에서도 많이 사용됩니다.

이와 함께 HTML, CSS 등의 웹 기술이 발전하면서 인터넷 환경이 빠르게 변화하기 시작했습니다.


 

 

 

4. 현대 및 미래의 프로그래밍 언어 (2010년대~현재)

최근 프로그래밍 언어는 보다 직관적이며 강력한 기능을 제공하는 방향으로 발전하고 있습니다. 대표적인 최신 프로그래밍 언어들은 다음과 같습니다.

  • Swift (2014년): 애플이 개발한 iOS 및 macOS 애플리케이션을 위한 언어로, 기존의 Objective-C를 대체하고 있습니다.
  • Kotlin (2011년): 안드로이드 개발을 위한 공식 언어로 선정되었으며, 자바보다 간결하고 효율적인 문법을 제공합니다.
  • Go (2009년): 구글이 개발한 언어로, 빠른 실행 속도와 높은 병렬 처리 능력을 갖추고 있습니다.
  • Rust (2010년): 메모리 안전성을 강조한 시스템 프로그래밍 언어로, C/C++의 대안으로 주목받고 있습니다.

AI와 빅데이터, 블록체인 등 새로운 기술들이 발전하면서 이에 적합한 프로그래밍 언어도 지속적으로 연구되고 있습니다.


5. 새로운 패러다임에 적응

프로그래밍 언어의 역사는 컴퓨터 기술의 발전과 함께 변화해 왔으며, 각 시대마다 요구에 맞는 새로운 언어들이 등장했습니다. 앞으로도 프로그래밍 언어는 더욱 발전하여, 보다 효율적이고 강력한 기능을 제공할 것입니다.

요즘에는 AI가 코드를 자동으로 생성하거나, 더욱 직관적인 방식으로 프로그래밍이 이루어지고 있습니다. 따라서 프로그래머들은 지속적으로 변화하는 기술 트렌드를 학습하고, 새로운 언어와 패러다임에 적응하는 것이 중요합니다.

이 글이 프로그래밍 언어의 역사에 대한 이해를 돕는 데 도움이 되었기를 바랍니다. 감사합니다!

 

 

* 문자 집합(Charset)이란 컴퓨터에서 사용하는 문자들의 집합입니다. 그 집합들을 어떻게 모아두었느냐에 따라 이름을 정해주어야 구분해서 쓸 수 있겠지요. 문자집합의 이름으로는 유명한 ASCII, ISO8859, 유니코드 등이 있습니다.

 

* 인코딩은 해당 문자를 어떻게 코드화하겠느냐는 방식을 나타내며, 디코딩은 반대로 어떤 코드를 어떻게 문자화하겠느냐는 방식을 나타냅니다. 마찬가지로 방식에 대한 이름이 있어야 구분해서 사용할 수 있겠지요. 유니코드 인코딩, UTF, Base64, EUC-KR, CP949 등의 이름이 있습니다. 예상할 수 있듯이 문자 집합과 인코딩은 서로 뗄 수 없는 관계이기에 같은 이름이 많네요.

 

<아스키(ASCII)> - 최초의 문자집합이며 7bit를 사용합니다. ASCII라는 문자 집합을 구성하지 않고 컴퓨터를 개발했다면.. 정말 상상하기도 싫군요..

Ascii_Code_Table_Innosoft2021.pdf
0.38MB
The ASCII Code Table by Innosoft.kr

 

<ISO/IEC 8859>

  - 서유럽의 움라우트와 같은 특수 문자를 포함하기 위해 8bit를 사용하는 표준을 제정.

  - ASCII 부분을 유지하므로 당연히 ASCII와 호환됨.

 

<DBCS (Double-Byte Character Set>

  - 한글, 일어, 중국어 등 많은 문자가 필요로 하다보니 더이상 1byte로 표현불가하니 만들어 낸 문자집합.

  - ASCII 부분은 유지를 하고, 최상위 비트 0과 1로 확장 부분을 구분. 따라서 ASCII 호환됩니다.

  - 확장 부분은 2byte를 사용해서 문자를 구성합니다.

  - EUC-KR, CP949 등

 

<EUC-KR>의 문자 집합 00~7F (ASCII 호환)

  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0                                
10                                
20   ! " # $ % & ' ( ) * + , - . /
30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
40 @ A B C D E F G H I J K L M N O
50 P Q R S T U V W X Y Z [ \ ] ^ _
60 ` a b c d e f g h i j k l m n o
70 p q r s t u v w x y z { | } ~  

<EUC-KR>의 문자 집합 B0A0~B0FF

  +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
B0A0  
B0B0
B0C0
B0D0
B0E0
B0F0  

위와 같이 정해진 위치에 확정된 글자가 명시되어 있으므로 "완성형"입니다. 해당하지 않는 문자를 표현할 수 없는 것이지요. 좀더 추가된 문자를 포함하여 만든 것이 CP949입니다. 마찬가지로 완성형이고, 포함되지 않는 문자는 표현할 수 없습니다.

 

"안녕Hello"라는 문자열은 총 4byte + 5byte = 9byte를 사용하게 됩니다.

 

 

<유니코드(Unicode)>

  - 위와 같이 언어별 인코딩이 다른 불편함을 해결하고자 ISO에서 동일한 규칙을 사용하도록 만든 문자집합입니다.

  - 유니코드 문자집합을 코드화하기 위한 인코딩에는 UTF-8, UTF-16, UTF-32등이 있습니다.

 

<UTF-8> 1byte~6byte 가변 문자 길이를 사용합니다. ASCII와 호환.

en.wikipedia.org/wiki/UTF-8

 

메모장에서 "안녕Hello"를 입력하고 UTF-8로 저장.

 

텍스트 파일을 Hexa Editor로 열어보기

 

앞의 3문자 "EF BB BF"는 UTF-8을 나타내는 BOM입니다. [아래에 설명]

"안"은 "EC 95 88", "녕"은 "EB 85 95", Hello는 "48 65 6C 6C 6F"임을 알 수 있습니다.

 

<UTF-8 인코딩 과정>

  - "안" = 0xEC 0x95 0x88 = 1110 1100   1001 0101   1000 1000

  - UTF-8 인코딩 테이블을 보면 U+0800 1110으로 시작하는 문자이고 3바이트를 사용하여 표현되고 있습니다.

  - U+0800에서 구분을 위하여 사용되는 "1110", "10", "10"을 제외한 나머지를 가지고 변환합니다.

  - 1110 1100   1001 0101   1000 1000 => 1100010101001000 => 0xC548

unicodemap.org/details/0xC548/

 

<UTF-16>

  - 2byte 또는 4byte를 고정으로 사용하기 때문에 ASCII와 호환되지 않습니다.

 

<BOM(Byte Order Mark)>

en.wikipedia.org/wiki/Byte_order_mark

UTF-16의 BE(Big Endian), LE(Little Endian)의 바이트 순서에 따라 바이트를 읽는 순서를 다르게 처리해주어야 합니다.

 

UTF-8은 Byte Order와 무관하여 "EF BB BF"를 저장하며 처리하는 프로그램도 있고(메모장같은), 처리하지 않는 프로그램도 있습니다. 그래서 Visual Studio나 웹페이지 개발시에 문서의 인코딩 에러가 가끔 나타나는 문제가 있지요. 각각의 프로그램에 맞게 BOM을 삭제하거나 추가하여 사용하면 문제를 해결할 수 있습니다.

 

 

아스키코드 테이블 The ASCII Code Table
https://ko.wikipedia.org/wiki/ASCII (위키백과-ASCII)

 

아스키코드 테이블입니다.

더이상의 아스키코드 테이블표는 필요없지 않을까 싶습니다!! ㅎㅎ

A4 인쇄하기 딱 좋게 제작하였습니다.

수정불가 다운로드 및 배포는 자유입니다.

 

The ASCII Code Table by Innosoft.kr

 

Ascii_Code_Table_Innosoft2021.jpg
1.42MB
Ascii_Code_Table_Innosoft2021.pdf
0.38MB

 

+ Recent posts