프로그램 : 컴퓨터가 해야 할 일을 적어준 설명서
프로그래밍 언어 : 설명서를 적는 언어
(한국어, 영어, 중국어와 같이 컴퓨터와 소통할 수 있는 외국어라고 생각하면 됨.. 다만 문자로 알파벳을 쓰고 단어들이 영어과 깊게 연관됨)
***프로그래밍 언어의 역사***
초기의 컴퓨터는 숫자 계산을 하는 기계에서 시작
저 파스칼 계산기 안에 저런 수식을 계산할 수 있는 기계장치가 있고, 사람이 톱니바퀴를 돌리면 계산 값이 나왔다.
여기에서 프로그래밍 언어란, '톱니바퀴를 돌리는 행위'라고 볼 수 있다.
파스칼 계산기의 정확한 원리는 이 유튜브 동영상을 통해 확인할 수 있다. ▼
이후에는 종이 위 원하는 숫자에 구멍을 뚫어 숫자를 지정, 계산하게 하는 기계가 나왔다. 마치 OMR카드 같은 원리라고 할까..?
종이를 재활용할 수 있어서 효율적이었다고 한다.
이 경우에 프로그래밍 언어란 '원하는 숫자에 구멍을 뚫는 행위'라고 할 수 있다.
현대 컴퓨터는 단순한 숫자 계산보다 더 복잡한 기능을 필요로 한다.
따라서 only 숫자뿐이었던 프로그래밍 언어도 영어와 숫자, 수식 기호가 혼합된 형태로 발전하였고
Java, Python, C 등의 여러 언어가 만들어졌다.
***프로그래밍 언어의 종류***
프로그래밍 언어는 왜 이렇게 다양할까?
당연히 초기에는 하나의 언어만 있었다.
그런데 사용자들 사이에서 해당 언어의 불편함이 공론화되었을 것이고,
더 쉽고 직관적인 언어를 만들자 ! 조금 복잡하더라도 실행 속도를 높일 수 있는 언어를 만들자 !
등 '용도', '상황', '프로젝트 규모'에 맞는 언어가 하나둘씩 개발되기 시작했다.
그중 인기 있는 언어들은 지금까지 남았고, 그렇지 않은 언어들은 도태되어 사라진 것이다.
TIOBE에서 조사한 바에 따르면 250개 정도의 프로그래밍 언어가 통용된다고 한다.
인기 순위 표는 다음과 같다.
이 많은 언어들을 분류하는 큰 기준 두 가지가 있는데, 바로 객체 지향 여부와 변수의 자료형(데이터 타입)지정 여부이다.
1) 객체 지향 여부
객체 지향은 프로그램을 만들 때 코드를 설계하는 방식이다.
프로그램을 개발할 때 양이 너무 많기 때문에 협업하는 일이 잦은데,
초기에는 이 협업을 기능별로 나눠서 했었고, 이를 Top-Down방식 프로그래밍이라고 한다.
기능별로 나눈다는 것이 무슨 말이냐하면,
예를 들어 인스타그램을 만들 때, 로그인 기능, 게시물 업로드 기능, 프로필 기능, 댓글 기능 등을 네 사람이 하나씩 맡아서 하는 것이다.
아주 자연스러운 협업 구조로 보이지만, 이 방식에는 큰 문제점이 있었다.
이 방식은 모든 데이터를 한 곳에 모으고, 각각의 기능을 명령하는 각각의 코드들이 이 데이터를 같이 공유했다.
(예를 들어 로그인 기능에 입력되었던 사용자의 데이터가 프로필 기능에도 같이 사용)
이렇게 되면 혹시라도 여러 기능 중 하나의 코드에 문제가 생겼을 경우, 인스타그램 전체 프로그램이 작동하지 않는다.
서로 같은 데이터로 연결되어있기 때문이다.
같은 이유로 전체 코드가 완성되기 전까지는 각각의 기능이 제대로 작동되는지 확인해 볼 수가 없었다.
그래서 만든 개념이 객체 object다.
객체는 한 기능에 필요한 데이터를 따로 모아서 기능(함수)과 데이터를 합쳐 객체로 묶어 작업하는 방식이다.
인스타그램을 예로 들면 사용자 객체, 게시글 객체 등을 생각해볼 수 있겠고 각각에 들어가는 데이터와 기능(함수)은 다음과 같을 수 있겠다.
이런 방식으로 작업하면 각각의 기능에 데이터가 공유되지 않으니 한 기능에서 오류가 나더라도 그것이 다른 기능에까지 영향을 미치지 않는다. 물론 테스트도 따로따로 해 볼 수 있다. 이렇게 서로 관련된 데이터와 기능을 객체로 분류하여 작업하는 방식을 객체지향 프로그래밍이라고 한다.
객체지향 프로그래밍의 등장은 가히 센세이션이었어서, 요즘 유행하는 언어들은 거의 객체지향 프로그래밍 언어라고 볼 수 있다.
그러나, 단점은, 객체를 분류하는 설계 작업이 너무 복잡하다는 것이다..ㅠ0ㅠ!
그래서 사실 데이터가 많이 필요하지 않은 프로그래밍 (스마트 냉장고, 에어컨 리모컨 같은...)에서는 굳이 객체 지향 프로그래밍을 할 필요는 없다.
객체지향을 지원하지 않는 언어로도 객체지향 프로그래밍을 할 수는 있지만, 매우 불편하다고 한다.
예를 들어 숫자 계산을 하는데 숫자를 안 쓰고 글자로 백이십오만 사천 원 + 오백이십구만 원 이렇게 하는 느낌이라고 함...
2) 자료형(데이터 타입) 지정 여부
프로그래밍 언어 인기 순위 1, 2, 3위에 있는 자바, C, 파이썬의 코드 문법을 비교해보았다.
보시다시피 변수를 지정해주고 있는 코드인데,
파이썬은 딱 봐도 직관적이고 이해하기 쉬운 반면, 자바와 C 이해하기 어려운 문자들과 기호들이 붙어있다.
다른 기호 규칙들은 다른 문법 때문이기 때문에 설명을 스킵하고,
가장 중요한 차이점은 Name과 Age 앞에 붙는 문자가 있다는 것이다.
이것은 변수 값의 자료형을 지정해주는 것인데,
컴퓨터의 사고 회로를 이해하면 이것이 왜 필요한지 알 수 있다.
저번에 포스팅 한, 자료형에 관한 글에서 언급한 바가 있는데,
( [5] 프로그래밍의 자료형 글 : jinsengjellyfish.tistory.com/35 )
인간은 1과 "1"을 같은 숫자로 인식하는 반면,
컴퓨터는 1은 숫자, "1"은 문자로 인식한다.
그러니까, 어떤 자료가 있을 때 그것이 숫자인지 문자열인지 한번 사고 회로를 거쳐야 하는 것이다.
자바와 C는 이 자료형을 컴퓨터가 따로 머리(?) 굴려서 구분해 낼 필요가 없도록 미리 외쳐 준다. 이건 문자열이야 !! 이눔아 !!
위 예시를 봤을 때 문자열은 자바에서 String, C에서는 char / 숫자열은 둘 다 int인가 보다.
이렇게 미리 알려주면 컴퓨터가 일하기 훨씬 편하고 빠르다. 컴퓨터를 위해 이런 설명을 넣는 것을 컴퓨터적 구조를 적용했다고 한다.
파이썬은 컴퓨터적 구조가 생략되어 쉽고 간결하다. 변수 값에 아무 자료형이나 넣을 수 있고, 컴퓨터가 알아서 판단해야 한다.
컴퓨터적 구조가 생략된, 자료형을 지정하지 않는 언어를 Dynamic Typing 이라고 하고, 그 반대를 Static Typing이라고 한다.
각각의 장단점이 있는데
Dynamic Typing은 코드를 짜기 쉽고 빠르고 간결한 대신, 컴퓨터의 실행 속도가 느려질 수 있고, 세밀하게 설명해주지 않았기 때문에 컴퓨터가 오류를 내기 쉽다.
반면, Static Typing은 문법에 제약과 규칙이 많고 외워야 하는 지정어들이 많아서 언어를 배우기가 어렵다.
그리고 코드를 짜기가 다소 복잡하고 오래 걸린다.. 설명충이기 때문에...
하지만 인간이 힘든 만큼 컴퓨터는 일하기가 쉽고, 사양이 극히 안 좋은 (머리가 안 좋은) 컴퓨터도 그냥 들리는 설명 대로만 행동하면 되기 때문에 잘 굴러간다. 실행 속도도 빠르다. 또한 언어의 규칙이 명확해서 여러 사람이 협업하는 큰 프로젝트일 경우에 서로 소통이 명확하며, 코드에 잘못된 부분이 있을 경우 프로그램에서 그 부분을 알려주기가 쉽다.
***어떤 언어를 배워야 할까?***
언어가 여러 개 생겼던 이유와 마찬가지로 '용도', '상황', '프로젝트 규모'에 맞게 본인이 필요한 언어를 고르면 된다.
프로그래밍 언어를 분류하는 기준을 살펴보았는데 이를 사분면 그래프로 정리하면 다음과 같다.
이것을 포괄적으로 적용하여, 프로그래밍 언어를 인간과 가까운 고수준 언어, 컴퓨터와 가까운 저수준 언어로 스펙트럼화 해볼 수 있다.
저수준으로 갈수록 추상화(불필요한 것을 생략)가 덜 되어서 인간이 이해하기 어렵고 컴퓨터가 이해하기 쉽고,
고수준으로 갈수록 추상화(불필요한 것을 생략)가 많이 되어서 인간이 이해하기 쉽고 컴퓨터가 이해하기 어렵다.
객체지향 여부로는 고수준과 저수준을 나눌 수는 없다. 설계 방식에서 얼마나 체계적이냐의 문제이기 때문이다.
그러나 자료형을 지정해주지 않고 열어놓는 언어는 고수준, 반대는 저수준 언어라고 할 수 있다.
([6] 추상화 - 변수 글 : jinsengjellyfish.tistory.com/36 )
▶고수준 언어 : 실행 속도에 크게 개의치 않은 프로젝트인 경우, 프로그램 구현 환경(컴퓨터 사양)이 좋은 경우, 혼자서 작업하는 간단한 프로젝트인 경우, 코딩을 처음 시작하는 경우(쉽고 빠르게 배우고 싶을 때)
▶저수준 언어 : 실행 속도가 빨라야 하는 프로젝트, 프로그램 구현 환경(컴퓨터 사양)이 안 좋거나 다양한 경우, 여럿이 협업해야 하는 큰 프로젝트인 경우
***대기업에서는 주로 JAVA를 쓴다고 하니 취업 준비하는 개발자들은 JAVA를 배우는 게 좋은 것 같다.
***필요에 따라 하나의 프로젝트에 여러 언어를 함께 쓰는 경우도 있다.
***특수 목적 프로그래밍 언어***
위에서 분류한 프로그래밍 언어들은 일반적 목적의 프로그래밍 언어들이고, 특수한 목적을 위한 언어들도 여러 개가 있다.
귀찮아서 긁어옴... 출처 표기했으니 괜찮겠죠..? 감사합니ㄷ ㅏ~
코드잇 짱! 수업 완전 좋은 것 같음! 광고 아님..!
'코린이의 코딩배우기' 카테고리의 다른 글
[11] 라이브러리 & 프레임워크 (0) | 2021.02.10 |
---|---|
[10] 좋은 코드란? : 가독성이 좋은 코드 (0) | 2021.02.10 |
[7] 추상화 - 함수, 파라미터 (0) | 2020.10.09 |
[6] 추상화-변수 (0) | 2020.10.03 |
[5] 프로그래밍의 자료형 (Data Type) (0) | 2020.10.02 |
댓글