[컴퓨터 개론] 프로그래밍 언어 이해하기

업데이트:

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

  • 프로그래밍 언어 분류 기준
    1. 객체 지향인지
    2. 코드에 자료형이 적히는지
    3. 컴퓨터에게 가까운지, 사람에게 가까운지


컴퓨터와 가까운 언어를 Low-level(저수준 언어)라고 하며,
사람에게 가까운 언어를 High-level(고수준 언어)라고 한다.


컴퓨터와 가까운 언어는 사람이 이해하기 어렵고, 사람과 가까우면 컴퓨터가 이해하기 어렵다.

컴퓨터는 모든 데이터를 저장해야하며, 자료형에 따라 저장하는 방식이 다르다.(EX. 1 != “1”)
사람은 문자열과 숫자를 분리해서 받아들이지 않음.(EX. 1, “1” == 전부 1)


Static typing 언어는 자료형이 지정되어 있어 컴퓨터에게 친절한 언어이다.
Dynamic typing 언어는 코드가 간결해서 사람이 보기 더 편하다.

자바와 C언어의 main메서드는 컴퓨터에게 프로그램의 시작점이 어디인지 알려주는 메서드이다.

하지만 C, Java, Ruby, Python 언어를 큰 관점에서 보면 모두 사람과 가까운 언어이다.
왜? 사람이 읽고, 뜻을 유추할 수 있기 때문이다.

어셈블리어, 머신코드(기계어)는 사람이 이해하기 힘들고, 컴퓨터만 이해할 수 언어이다.



프로그래밍 언어의 추상화

추상화는 프로그래밍에 있어서 매우 중요한 개념이다.
추상화가 많이 될 수록 고수준 언어가 된다.

추상화는 몰라도 되는 내용은 숨기고 꼭 알아야 할 내용만 드러내는 것이다.

기계어나 어셈블리어로 작성된 코드는 사람이 이해하지 못 하고, 필요하지 않은 내용들이 많다.
이런 코드를 가려주고 꼭 필요한 내용들만 보여주는 것을 추상화라고 한다.
C나 Java보다 파이썬과 루비가 훨씬 간단하고 추상화되어 있다.


추상화는 프로그래밍 언어의 전반에 제공되기 때문에, 문법 뿐만 아니라 코드를 작성하는 방식과 코드를 바라보는 관점이 달라진다.



저수준 언어와 고수준 언어 비교하기

고수준 언어의 장점

프로그래머가 꼭 필요한 것만 신경쓰고, 복잡한 것은 컴퓨터에게 맡기면 된다.
좀 더 필요한 기능과 논리에 집중할 수 있다.
코드를 더 빨리 만들 수 있다.

고수준 언어의 단점

컴퓨터에게 너무 많은 것을 맡긴다.
컴퓨터는 여러가지 경우에 대한 고민을 하게 되기 때문에(로딩) 컴퓨터의 성능이 좋아야하며, 실행 속도가 느리다.



저수준 언어의 장점

제한적인 사용으로도 최대한 실행 속도와 효율을 올릴 수 있다.
에어컨, 냉장고, 전광판 등 제한적인 칩을 가지고 있는 경우에 저수준 언어를 사용해서 몇 가지의 명령만을 가지고 실행시킬 수 있다.


저수준 언어의 단점

저수준 언어는 신경 쓸 것이 많고, 코드 작성과 관리가 오래 걸린다.



정리

프로그래밍 언어를 분류하는 두 가지 기준

  • 객체 지향 프로그래밍 언어인가?
  • 변수의 데이터 타입을 어떻게 사용하는가?(Dynamic Typing 언어 VS Static Typing 언어)


이 두 가지 기준으로 현재 사용되고 있는 프로그래밍 언어들을 나눠보면 크게 세 가지 부류가 있다.
‘자세한 언어’, ‘체계적인 언어’, ‘쉬운언어’라고 이름을 붙일 수 있다.


자세한 언어

자세한 언어로는 Low-level에 가까운 어셈블리 언어C 언어 등이 있다.
객체 지향 개념이 적용되지 않고, 코드를 작성할 때 자료형 등의 컴퓨터적 구조를 다 고려해줘야 하는 언어이다.

이 언어들은 사람보다는 컴퓨터의 논리적인 사고 방식에 맞추어져있어, 사람들이 작성하기는 어렵지만, 컴퓨터가 실행하기는 좋다.
프로그램을 빠르고 효율적으로 만드는데 최적화되어 있다.
스마트 워치, TV, 스피커, 전광판, 가전제품 등 컴퓨터가 메인이 아닌 기계에서 자주 사용된다.
이런 기계들은 보통 작은 칩에서 돌아가기 때문에 저장 공간이나 성능이 컴퓨터보다 상당히 열악하기 때문에 C같은 ‘자세한 언어’가 핵심적으로 사용된다.
참고로, 이런 곳에 들어가는 시스템을 임베디드 시스템이라고 부른다.
IoT라고 해서, 이런 임베디드 시스템을 연결해서 스마트홈을 만들거나, 기계들 사이의 통신을 할 수 있게 하기도 한다.

임베디드 시스템 외에도 자세한 언어가 활약할 수 있는 분야가 있다.
수많은 문자를 거의 실시간으로 전송해야하는 채팅 애플리케이션이나 동영상 스트리밍 서비스, 검색엔진, 머신 러닝 같은 빅데이터 처리 속도와 알고리즘이 중요한 그런 분야의 회사에서 많이 사용된다.
이처럼, 사람이 코딩하는 시간은 길어지지만, 컴퓨터가 실행하는 시간은 조금이라도 빠르게 하고 싶은 경우에 사용한다.

장점 : 프로그램을 만들기만 하면 컴퓨터가 실행하는 속도는 매우 빠르다. 성능이 안 좋은 컴퓨터에 적용하기 좋다.
단점 : 코드를 작성하거나 고치는 게 힘들고 오래 걸린다.



체계적인 언어

자세한 언어와 마찬가지로 static typing 언어이지만, 객체 지향 개념이 적용된 언어이다.
JavaC++같은 언어들이 여기에 속하고, 체계가 잡혀있기 때문에 여러 사람이 함께 작업하기에 가장 적합하고, 협업 과정에서 오류가 적어서 주로 큰 규모의 프로젝트에 적합하다.

규모가 큰 기업들에서는 Java를 많이 사용하고 있는데, 구글, 에어비앤비, 우버 등등 매우 많은 회사가 사용하고 있다.

장점 : 짜임새와 협업이 중요한 규모가 큰 프로젝트에 적합하다. 객체 지향 개념이 적용되어서, ‘자세한 언어’보다 유지보수 하기가 편하다.
단점 : ‘자세한 언어’보다는 낫지만, 여전히 문법이 완전 쉽지는 않다. 코드를 작성하는 시간보다도 체계적으로 설계하는 데에 시간이 오래 걸릴 수 있다.



쉬운 언어

객체 지향 개념이 적용된, Dynamic typing 언어를 말하며, 프로그래머가 아닌 사람도 비교적 쉽게 배우고 사용할 수 있는 Python,Ruby등의 언어가 여기에 속한다.

이 언어들은 최대한 간결하고, 짧은 코드를 추구하고 문법도 간편해서 코드를 작성하는 시간이 가장 짧다.
쉬운 언어는 빠르게 개발이 필요한, 변화가 많고 잦은 분야에서 많이 사용되고, 데이터 사이언스, 업무 자동화와 같이 개인 규모의 프로젝트에서도 가장 많이 사용된다.

장점 : 진입 장벽이 낮다. 배우기 쉽다. 코드를 읽거나 수정하기가 가장 간편하다. 코드를 빨리 작성할 수 있다.
단점 : 코드 작성 시간은 짧지만, 컴퓨터의 코드 실행 속도가 느리다. 성능 제약이 심한 곳에서 빠른 속도를 내야 하는 경우는 사용할 수 없다. 프로그래밍 코드 문법에 제약이 너무 없어서, 큰 규모의 프로젝트에서 실수를 방지하기가 어렵다. 많은 사람들의 협업에는 부적합할 수 있다.


프로그래밍 언어의 흐름

컴퓨터와 칩의 성능이 좋지 않던 시기에는 ‘자세한 언어’들이 등장했고, 그 다음 협업과 생산성 향상에 좋은 객체 지향 프로그래밍이 대세로 떠오르면서 ‘체계적인 언어’가 인기를 얻었고, 누구나 프로그래밍을 배우고 할 수 있는 최근에 들어서서 ‘쉬운 언어’가 인기를 끈다.

하지만, 이런 분류들이 언어를 나누는 절대적인 기준이라고는 볼 수 없고, 필요에 따라서 언어들이 등장했다.



특수 목적 언어

앞서 배운 언어는 일반적인 용도로 만들어진 프로그래밍 언어(General-purpose programming language)이고, 특별한 목적을 위한 프로그래밍 언어(Domain-specific programming language)들도 있다.

특수 목적 언어에는 R, SQL, HTML, CSS 등이 있다.

  • R

R은 주로 통계 소프트웨어 개발과 데이터 분석 및 시각화에 널리 사용되고 있다.
특히 통계나 빅데이터 분석에 필요한 데이터 전처리, 분석, 수학적인 계산과 그래프를 그리는 등의 기능에 특화되어 있다.


  • SQL

SQL은 데이터베이스를 관리하기 위한 목적의 프로그래밍 언어이다.
데이터베이스란 데이터를 모아둔 공간을 의미하는데, 프로그래머들은 SQL을 사용해서 데이터베이스를 설계하거나 운영하고 관리한다.
요즘에는 데이터가 워낙 많이 활용되기 때문에, 개발자 뿐 아니라 마케터나 데이터 분석가들이 SQL을 사용하여 서비스의 데이터(매출, 고객 정보 등)을 분석한다.

  • HTML, CSS

HTML과 CSS는 웹 페이지를 만들 때 사용한다.
HTML은 주로 웹 페이지의 구조와 레이아웃을 담당하고, CSS는 웹 페이지의 시각적인 표현을 담당한다.

주로 여기에 JavaScript를 함께 사용해서, 웹 페이지가 사용자와 상호 작용할 수 있게 만든다.

Web을 구성하는 3가지 요소

HTML : 구조
CSS : 표현
JavaScript : 동작


이 외에도

MATLAB - 공학 시뮬레이션용 프로그래밍 언어
Csound - 소리와 음악 합성에 사용되는 프로그래밍 언어
Scratch - 블록을 조립하여 쉽게 자기 자신의 이야기나 게임 그리고 애니메이션을 만들 수 있는 교육용 프로그래밍 언어
등이 있다.



[코드잇-컴퓨터 개론]https://www.codeit.kr/courses/intro-to-computer

태그:

카테고리:

업데이트:

댓글남기기