지식 게시판

몇 세대일까? : 프로그램 언어의 세대

미레티아 2015. 1. 3. 15:49

과학만 쓰다가 굉장히 오랜만에 IT분야를 써 보는 것 같군요.

요즘 C++을 배우고 있던 와중에 떠오른 주제인데,

프로그램의 언어에도 세대가 있다는 것 아세요?

왜, 마치 휴대폰이 1G, 2G, 3G, 4G,...그렇게 있는 것처럼요.

(휴대폰의 세대에 대한 글: http://miretia.tistory.com/204)

그러면 프로그램의 세대는 어떻게 구분할까요?

또, 몇 세대까지 있을까요?

이제 차근차근 알아봅시다. ^^


출처: http://durl.me/7yoj8g

(무료 일러스트 사이트래요~그런데 다운받은 후 '커피 한잔 사주세요'는 뭐지...?)


먼저, 프로그램의 세대를 의미하는 약자인 GL에 대해 알아볼까요.

GL은 Generation language의 약자입니다.

직역하면 '세대 언어'이죠....

그래서 1세대는 1GL, 2세대는 2GL,...이라고 표현합니다.

현재까지 엄밀히 말하면 4GL까지 나와있고 5GL은 개발중입니다.

사실 5GL의 의미가 많이 변질되어 Java나 C#으로 알려진 경우도 많죠.


그럼, 1GL부터 알아볼까요?

1GL은 '기계 언어'라고 부릅니다.

컴퓨터가 바로 알아들을 수 있도록 이진법 숫자를 사용해서 프로그래밍을 짭니다.

그래서 전기가 통할 때는 1, 전기가 안 통할 때는 0, 이 두개의 on/off만 가지고 짜는겁니다.

예를 들어, 유니코드의 A는 01000001이죠.

한글은 초성-중성-종성이 있으니까 기계어로 나타내기는 영어보다 더욱 힘들다고 합니다.

뭐, 모스 부호도 아니고...이런 노가다....-_-;; 참 싫죠?

중간에 한 글자 틀리면 찾기도 힘들고 프로그램 자체가 에러날 수 있으니까요.

또, 이것은 기종마다 기계어가 다릅니다.

대신에 컴퓨터가 바로 이해하기 때문에 실행하는 속도는 빠르다네요.


그래서 2GL은 좀 더 쉬워집니다.

2세대 언어는 '어셈블리 언어'라고 부르는데요,

기계어와 일대일 대응을 하기 때문에 변환기가 필요없어

기계어와 같은 빠른 속도를 자랑하면서 영어로 되어있어서

0과 1을 계속 치면서 짜지 않아도 됩니다.

한번 비교해볼까요?

위키백과에 나온 예시인데 기계어 중 ×86 계열 CPU의 기계어 명령

'10110000 01100001'을 어셈블리 언어로 바꾸면

'mov al, 061h'로 나타낼 수 있다고 합니다.

훨씬 좋아졌죠?


자, 그럼 3GL로 넘어가볼까요.

3세대 언어는 '고급 언어'라고 하기도 하고

문제 자체에 초점을 맞추고 집중할 수 있게 했기 때문에 '문제지향의 언어'라고도 하고

프로그래머가 논리적 절차에 맞게 짜야 해서 '절차어', '순차형 언어'라고도 하지만

이런 말들 거의 안 씁니다.

왜냐하면 3세대 언어는 종류가 많거든요.

그래서 자바, C++, 뭐 기타 등등 그냥 이렇게 이름을 부르지요.

이런 언어로 프로그램된 프로그램은 컴파일러가 기계 언어로 변환을 해줍니다.

혹은 컴파일러 말고 인터프리터가 변환을 하기도 한다는데

다 같이 묶어서 '변환기'가 필요하다고 생각하시면 됩니다.

(저는 C++을 배우고 있어요. ^^)


4GL은 보통의 언어와 비슷하게 프로그램을 짤 수 있도록 하는 것입니다.

솔직히 3GL도 영어로 되어있어서 편하긴 하지만

순서 틀리면 안 되고, 세미콜론 안 붙이면 안 되고, 괄호 한번 잘못 쓰면 안 되고,

에러사항이 의외로 많습니다.

4세대 언어는 절차 위주로 그렇게 길게 작성할 필요가 없다고 합니다.

예시를 한번 들어볼까요.

(제가 안 배워서 이 예시가 정확한지는 모르지만 책에 있으니 맞겠죠...?)

FIND All Titles FROM Books WHERE Title begins with "Handy"

물론 이것도 형식이 있습니다.

문법 틀리로 맘대로 막 친다고 프로그램이 되는 것은 아닙니다.

대표적인 프로그램은 오라클(Oracle), FoxPro등이 있습니다.



5세대 언어는 아직 안 나왔지만 개발하고 있습니다.

이 5GL의 목표는 영어나 한국어와 같은 우리가 일반적으로 쓰는 언어로

프로그래밍이 가능하게 만드는 것이죠.

예를 들어, '아인슈타인이 누구냐?' '아인슈타인이 어떤 사람일까?' '아인슈타인에 대해'

...이런 문장들을 써도 프로그램을 실행하면 

모두 아인슈타인에 대한 정보를 찾아주는 것이죠.

여기는 일상생활에서 사람들이 틀리는 문법도 이해해야 합니다.

또, 우리나라 사람들 사투리 엄청 많잖아요.

그런 것도 이해할 수 있어야지 제대로 된 5세대라 볼 수 있죠.

아이폰의 '시리(Siri)'도 5세대 언어와 가깝게 만들고자 하는 것 같습니다.

물론 못 알아듣고 엉뚱하게 하는 경우도 많아서 아직 5세대라 보긴 어렵고,

프로그램을 돌리는 형식이 정해져 있는 것도 아니니 4세대라 보기는...아까운 것 같습니다.

그냥 4.5GL이라 하면 될까요??


하루빨리 5GL이 개발되어 C++을 배우지 않았으면...

아 물론 3세대 언어부터 인터프리터나 컴파일러가 필요하듯이

4세대, 5세대 언어들도 그런 것들이 더 정교하게 만들어져야 하므로

아무리 프로그램 언어가 개발되어도 개발자들은 낮은 세대의 언어들을 배워야 할겁니다.

왜, Wolfram Alpha라는 사이트도 유저들이 보기엔 4세대 비슷하게 만들어 놓았지만

실제로 그 사이트를 만드는 프로그램은 3세대 프로그램 언어를 사용하는 것처럼요.

어쨌든, 5GL이 개발되면 생활이 더 편리하고 재미있을 것 같습니다.^^