프로그래밍 언어 이해하기2

타키탸키·2020년 12월 29일
0

컴퓨터 개론

목록 보기
3/9

지난 시간에는 프로그래밍 언어와 프로그래밍 언어를 분류하는 방법을 배웠습니다. 이어서 프로그래밍 언어의 스펙트럼과 사용법에 대해 더 알아보겠습니다.

📝 프로그래밍 언어 스펙트럼

프로그래밍 언어를 분류하는 기준으로 객체 지향 지원 여부와 코드에 자료형 유무가 있었습니다. 이외에도 컴퓨터와 가까운지, 인간에 가까운지에 따라 분류가 가능합니다. 이 기준은 딱 떨어진다기 보다는 언어에 따라 상대적인 개념이라 할 수 있습니다.

인간과 가까운 언어를 고수준 언어(High-level)라 하고 컴퓨터와 가까운 언어를 저수준 언어(Low-level)언어라 합니다. 저수준 언어는 사람이 이해하기 어렵고 반대로 고수준 언어는 컴퓨터가 이해하기 어렵습니다.

지난 시간에 변수의 자료형에 대해 설명드리며 컴퓨터적 구조라는 단어를 사용했던 것을 기억하시나요? 사람은 1과 "1"을 똑같이 인식하는 반면 컴퓨터는 이 둘을 다르게 인식합니다. 따라서, 자료형을 지정해주면 컴퓨터의 입장에서는 이해하기 쉽습니다. 이러한 관점에서 Dynamic Typing 언어는 고수준 언어라 할 수 있고 Static Typing 언어는 저수준 언어라 할 수 있겠네요. 함수를 정의할 때도 마찬가지입니다. C와 Java의 코드에서 우리가 이해하기 어려운 부분은 사실 컴퓨터의 이해를 돕는 장치들이었습니다.

하지만 큰 관점에서 보면 우리가 사용하는 대부분의 프로그래밍 언어들은 전부 고수준 언어라고 할 수 있습니다. 이해하긴 어렵긴 해도 그 의미를 대략적으로나마 짐작이 가능하기 때문이죠. 실제 저수준 언어들은 좀 더 이해하기가 어렵습니다. 어셈블리어의 예를 한 번 볼까요?

어셈블리어는 C와 Java보다도 인간의 관점에서 볼 때 이해하기가 더 어려워보입니다. 이 어셈블리어보다 더 저수준 언어에 가까운 언어는 Machine Code입니다. 우리가 익히 알고 있는 0과 1의 이진수로 이루어진 언어이죠.

여기서 우리는 지난 시간에 배웠던 추상화의 개념을 떠올려 볼 수 있습니다. 사실 고수준과 저수준을 나누는 기준은 이 추상화에 있습니다. 고수준 언어는 추상화가 높은 언어로 그 내부에 있는 복잡한 원리들은 눈에 잘 보이지 않고 꼭 필요한 기능만을 보여주고자 합니다. 반면, 저수준 언어는 추상화가 낮아 원리들이 조금씩 눈에 보입니다. 머신코드와 어셈블리어가 복잡한 원리들이라 할 수 있겠네요.

이처럼 추상화는 문법에 국한되지 않고 코드를 작성하는 방식이나 코드를 바라보는 관점에도 모두 적용되는 개념입니다. 즉, 추상화가 얼마나 되었는지에 따라 코딩을 하면서 어디에 초점을 맞춰야 하는지가 달라집니다.

만약 음료가 담긴 자판기를 저수준 언어로 만들면 어떻게 될까요? 기계의 설명서인 프로그램을 만들기 위해 우리는 좀 더 복잡한 코드(설명서)가 필요할 것입니다. 기계의 관점에서는 사람이 이해할 수 있는 직관적인 설명으로는 부족할테니까요. 따라서, 아주 세분화된 과정을 요구합니다.

  1. 입구에서 앞으로 1미터 직진한다.
  2. 오른쪽으로 3센치 이동한다.
  3. 원하는 음료가 있는지 확인한다.
  4. 그 음료가 맞으면 7번을 실행한다. 아니면 5번을 실행한다.
  5. 오른쪽으로 한 칸 이동한다. 더 갈 곳이 없으면 아래로 한 칸 이동한다.
  6. 4번으로 돌아간다.
  7. 원하는 음료가 있으면 음료를 집어든다.

반면 고수준 언어로 만들게 된다면 인간이 이해하기 쉬운 직관적인 설명서가 작성될 것입니다. "음료가 있는 칸으로 이동해서 포X리 가져와"라는 식으로요. 자판기의 구조나 거리 등을 사람이 생각할 필요없이 기계에게 맡기고 원하는 맥락만을 기계에 제시해 주면 됩니다.

각각의 스펙트럼이 지닌 장단점을 봅시다. 우선, 고수준 언어의 장점은 프로그래머가 좀 더 필요한 기능과 논리에 집중할 수 있다는 것입니다. 코드를 이해하기도 쉽고 수정하기도 쉽습니다. 최근 유행하는 언어들은 추상화가 높은 편입니다. 그러나 고수준 언어는 컴퓨터에게 너무 많은 일을 맡기게 됩니다. 컴퓨터가 여러 가지 고민에 대해 처리하느라 과부하가 일어나거나 처리 속도가 느려집니다. 이를 방지하려면 컴퓨터의 성능이 아주 좋아야 하죠.

저수준 언어는 신경쓸게 많고 코드 작성과 관리가 어렵습니다. 그러나 컴퓨터의 입장에서는 이해가 빠르므로 성능이 좋지 않은 컴퓨터도 빠른 업무 처리 속도를 보여줍니다. 이러한 저수준 언어의 효율성은 스마트 가전에서 빛을 발합니다. 제한적인 사용으로 최대한의 실행 속도와 효율을 높일 수 있기 때문입니다.

📝 프로그래밍 언어의 세 부류

프로그래밍 언어를 나누는 새로운 분류가 있습니다. 자세한 언어, 체계적인 언어, 쉬운 언어 이 세 가지 부류로 나누는 것이죠.

❗ 첫번째, 자세한 언어.

자세한 언어로는 저수준 언어인 어셈블리어와 C언어를 예로 들 수 있습니다. 객체 지향을 지원하지 않고 컴퓨터적 구조를 따릅니다. 사람들이 작성하기 어려운만큼 컴퓨터가 실행하기에는 아주 좋습니다.

자세한 언어는 속도와 효율을 요구하는 스마트 기기에서 주로 사용되고 있습니다. 칩이라는 아주 작은 공간에서 빠르게 동작해야 하기 때문이죠. 이러한 시스템을 임베디드라고 부릅니다. IoT는 이러한 임베디드 시스템을 통해 스마트홈을 구현하거나 기계들 사이의 통신을 가능케 하는 기술입니다.

임베디드 외에도 실시간을 요구하는 채팅 프로그램이나, 주식 프로그램, 스트리밍 서비스에서도 많이 활용되고 있습니다.

자세한 언어의 장점은 실행 속도가 매우 빠르고 성능이 좋지 않은 컴퓨터에 적용하기 좋다는 것이고 단점은 코드를 작성하거나 고치는 게 어렵다는 것입니다.

❗ 두번째, 체계적인 언어.

자세한 언어와 마찬가지로 Static Typing언어 이지만 객체 지향을 지원한다는 부분에서 차이가 있습니다. Java와 C++이 대표적인 예입니다. 체계가 잘 잡혀있어 여러 사람이 협력하기에 가장 적합한 언어이며 오류가 적어 규모가 큰 프로젝트에서 잘 사용됩니다.

특히, 기업에서는 Java를 매우 선호합니다. Google, Ebay, Uber 등 이름 난 회사들에서 Java를 활발히 사용하고 있습니다. 많은 이들이 취업을 위해 Java를 선택하는 이유입니다.

체계적인 언어의 장점은 체계성과 협업이 중요한, 규모가 큰 프로젝트에 적합하며 객체 지향 개념이 적용되어 자세한 언어보다는 유지보수가 편리하다는 것입니다. 단점은 여전히 문법이 어려운 편이며 코드를 작성하는 시간보다 체계적으로 설계하는 데 시간이 오래 걸릴 수 있다는 것입니다.

❗ 세번째, 쉬운 언어.

쉬운 언어는 객체 지향 개념이 적용된 Dynamic Typing언어를 말하며 비전공자도 쉽게 배우고 사용할 수 있는 Python과 Ruby가 이에 속합니다.

쉬운 언어는 간결하고 짧은 코드를 선호하여 문법이 매우 간편합니다. 코드 작성이 빠른만큼 변화가 잦은 분야에서 활용이 되고 있고 데이터 사이언스나 업무 자동화와 같이 개인 규모의 프로젝트에서도 많이 선호되고 있습니다.

쉬운 언어의 장점은 진입장벽이 낮아 배우기 쉽고 코드를 이해하고 수정하기나 쉬우며 작성이 빠르다는 것입니다. 단점은 컴퓨터의 실행 속도가 느리고 성능 제약이 심한 곳에서나 빠른 처리 속도를 요구하는 곳에서는 적합하지 않다는 것입니다. 또, 문법에 제약이 없기 때문에 실수를 방지하기가 어려워 여러 사람이 협업하는 프로젝트에도 적절하지 않습니다.

📝 프로그래밍 언어의 흐름

컴퓨터의 성능이 좋지 않았던 시기에 자세한 언어들이 등장했습니다. 이후, 협업과 생산성 향상의 요구에 따라 객체 지향 프로그래밍이 대세로 떠오르면서 체계적인 언어들이 등장했고 프로그래밍의 진입장벽이 낮아진 현대에는 쉬운 언어가 인기를 끌고 있습니다.

그러나 이것은 어디까지나 흐름과 대세에 관한 이야기일뿐, 여전히 필요한 분야에서는 C와 같은 자세한 언어가 활발히 쓰이고 있습니다. 체계적인 언어 중 하나인 Kotlin이 등장한 것이 최근이기도 하구요.

📝 특수 목적 언어

지금까지 다양한 프로그래밍 언어를 살펴봤는데요. 이들 언어 외에도 아직 더 많은 언어들이 있습니다. 그 중에서도 특수한 목적을 가지고 사용하고 있는 언어들을 살펴봅시다.

R은 주로 통계에 관한 소프트웨어와 데이터 분석, 시각화에 사용되는 언어입니다. 통계와 빅데이터 분석에 필요한 기능에 특화되어있기 때문입니다.

SQL은 데이터베이스를 관리하기 위한 목적으로 나온 언어입니다. 데이터를 모아둔 창고인 데이터베이스에서 원하는 데이터를 추출하거나 데이터 서버를 구축하고 운영하는데 사용되고 있습니다.

HTMLCSS는 웹페이지를 만들 때 사용되는 언어입니다. HTML이 웹페이지의 구조와 레이아웃을 담당한다면 CSS는 웹페이지의 시각적 표현을 담당합니다. 이에 Java Script를 더하여 웹페이지가 사용자와 상호작용할 수 있도록 만듭니다.

이외에 공학 시뮬레이션용 MATLAB, 소리와 음악 합성에 사용되는 Csound, 교육용 프로그래밍 언어 Scratch 등도 있습니다.

profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글