미국의 많은 대학의 컴퓨터 공학부에서 첫 프로그래밍 언어 과정을 파이썬으로 선택하고 있습니다. 여러 조사기간에서 발표한 2019년에 배워할 프로그래밍 언어 TOP 10에서도 당당히 1위를 차지한 파이썬. 이 강좌에서는 파이썬 입문자를 위하여 파이썬 프로그래밍 언어가 무엇인지, 어떤 용도로 사용 가능한지에 대해서 공부하도록 하겠습니다.
파이썬은 간결하고 쉬운 구문 때문에 프로그래밍을 처음 접하는 초보자에게 아주 적합한 언어이며, 실제로 미국의 많은 대학들이 프로그래밍 교육과정의 첫 번째 언어로써 파이썬을 가장 많이 선택하고 있습니다.
위에 이미지에서 한 조사 결과를 볼 수가 있는데요, 미국 상위 컴퓨터 공학부 39개를 대상으로 컴퓨터 공학부의 기초 과정인 CS0와 CS1에서 사용되고있는 프로그래밍 언어에 대해서 조사한 결과입니다. 파이썬을 가장 많이 사용하고 있다는 것을 알 수 있습니다.
다음은 파이썬이 얼마나 쉬운 언어인지를 강조하기 위해서 C++로 "Hello World" 프로그램을 만든 것과 파이썬으로 만든 것을 비교해봤습니다. 콘솔창에 "Hello world"라는 텍스트를 출력하는 아주 간단한 프로그램입니다만, C++로 이 프로그램을 만들려면 다음과 같이 6줄의 코드가 필요합니다.
하지만 파이썬으로 같은 프로그램을 만들면 아래와 같이 단 한 줄의 코드로 간단히 만들 수가 있습니다.
파이썬의 탄생
파이썬은 귀도 반 로섬이라는 네덜란드 사람이 1989년 크리스마스 연휴동안 취미로 만든 프로젝트로 부터 탄생했다고 합니다.
그럼 지금부터 파이썬의 특성에 대해서 간략히 설명하도록 하겠습니다. 이 강좌는 기초강좌이므로 파이썬이 어떤 언어인지 아주 간단히 설명을 드리고, 더 자세한 설명은 기초 강좌를 마친 후, 고급 강좌에서 다루도록 하겠습니다.
하이레벨 언어
파이썬의 첫 번째 특성입니다. 파이썬은 하이레벨 언어입니다. 하이레벨 언어란 수준이 높은 언어라는 뜻이 아니라, C, Java, Python 등과 같이 기계 보다는 사람에게 더 가까운, 즉 사람이 쉽게 이해할 수 있는 언어를 뜻합니다. 반대로 어셈블리와 같이 사람이 이해하기 어렵고 머신코드에 더 가까운 언어를 로우레벨 언어라고 합니다.
인터프레티드 언어
파이썬의 두 번째 특성입니다. 파이썬은 인터프레티드 프로그래밍 언어입니다. 프로그래밍 언어는 크게 두 가지로 분류할 수가 있는데, 첫 번째는 C, C++와 같은 컴파일 언어 (Compiled language 이고, 두 번째는 파이썬, PHP, 자바스크립트, 루비등과 같은 인터프레티드 언어 (Interpreted language)입니다. 인터프레티드 언어는 다시 하이브리드 언어와 순수한 인터프리티드 언어로 분류되는데, 파이썬은 전자인 하이브리드 언어에 해당됩니다.
컴파일 언어는 프로그램을 실행 하기 위해 소스코드를 컴퓨터가 이해할 수 있는 머신코드로 변환하는 컴파일 과정을 거쳐 exe 파일과 같은 컴파일 파일을 만들어야 실행을 할 수 있습니다.
반대로 파이썬과 같은 인터프레티드 언어는 프로그램을 실행 하기 위해서 컴파일을 할 필요가 없으며, 실행중에 인터프레터라는 프로그램이 소스코드를 한 줄씩 컴퓨터가 이해할 수 있는 머신코드로 변환하여 실행하도록 되어 있습니다.
두 가지 언어는 각각 다음과 같은 장단점을 가지고 있습니다.
컴파일 언어의 첫 번째 장점은 빠른 속도입니다. 미리 머신코드로 컴파일 된 파일을 실행하므로 인터프레터가 한 줄 한 줄씩 번역해가면서 실행해야 하는 인터프레티드 언어보다 더 빨리 데이터를 처리 할 수 있습니다. 컴파일 언어의 두 번째 장점은 하드웨어나 시스템 플랫폼에 맞춰서 개발을 할 수가 있다는 점입니다. 컴파일 언어의 세 번째 장점은 소스코드를 감출 수 있다는 점입니다. 프로그램이 항상 컴파일 된 상태로 사용자에게 배포되므로 자신이 개발한 코드의 도용을 막을 수가 있습니다.
이번에는 컴파일 언어의 단점인데요, 컴파일 언어로 만든 프로그램을 실행 하기 위해서는 항상 컴파일을 해야 하는 번거로움이 있고, 그 때문에 코드의 수정 및 배포에 걸리는 시간이 인터프레티드 언어보다 느리다는 단점을 가지고 있습니다. 또한 다른 OS에서 프로그램을 실행 하기 위해서는 그 OS에 맞게 소스코드를 수정해야하고, 그 OS에 맞는 컴파일 과정을 거쳐야 사용할 수 있다는 단점을 가지고 있습니다.
그렇다면 인터프레티드 언어의 장점과 단점은 무엇일까요? 컴파일 언어와는 반대로 인터프레티드 언어의 가장 큰 장점은 컴파일을 하지않아도 된다는 점입니다. 프로그램을 만들고 실행 하기까지의 절차가 컴파일 언어에 비해서 짧고 간단하기 때문에 개발자가 자신의 아이디어를 쉽게 테스트해 볼 수도 있고, 다른 사람들에게 자신의 아디어를 보여줄 수 있는 프로토타입을 만들기 위한 목적으로도 많이 사용되고 있습니다.
인터프레티드 언어의 두 번째 장점은 OS에 맞는 인터프레터만 설치되어 있으면 소스코드의 수정없이 어떤 OS에서도 실행할 수 있는 크로스플랫폼 언어라는 점입니다. 하지만 인터프레티드 언어는 컴파일 언어에 비해 퍼포먼스가 떨어진다는 단점을 가지고 있습니다. 그런데 요즘은 인터프레티드 언어의 퍼포먼스도 이전에 비해 많이 좋아져서 구글이나 유튜브, 인스터그램등 큰 프로젝트에서도 많이 사용되고 있다고 합니다.
인터프레티드 언어의 또 다른 단점은 소스코드를 다른 사람이 볼 수 있다는 점입니다. 하지만 이런 단점을 보완하기 위해서 파이썬의 경우, pyinstaller, py2exe, cx_Freeze와 같은 파이썬 라이브러리를 사용해서 exe 확장자 파일을 생성하여 배포하거나, Cpython을 통해서 바이트코드로 컴파일 된 pyc 파일을 배포할 수도 있습니다.
객체 지향적 프로그래밍
다음은 파이썬의 세 번째 특성입니다. 파이썬은 객체 지향적 프로그래밍, 절차 지향적 프로그래밍, 함수적 프로그래밍 패러다임을 모두 지원합니다. 프로그래밍 패러다임이란 어떠한 문제를 프로그래밍을 통하여 풀기 위한 접근 방법이라고 생각하시면 되는데, 한 언어가 꼭 한가지의 패러다임에 국한 되지는 않으며, 파이썬과 같이 여러 가지 패러다임을 지원할 수도 있습니다.
다이나믹 타이핑 언어
네번째 파이썬의 특성입니다. 파이썬은 다이나믹 타이핑 언어입니다. 변수를 정의 할 때 항상 데이터 타입을 지정해 주어야 하는 스태틱 타이핑 언어와는 반대로, 파이썬은 데이터 타입의 지정없이 변수를 정의할 수 있습니다. 거의 대부분의 현대 스크립트 언어는 모두 다이나믹 타입핑을 사용하고 있습니다.
마지막으로 파이썬의 다섯번째 특성입니다. 파이썬은 강력한 스탠다드 라이브러리를 포함하고 있습니다. 이런 이유로 파이썬에는 배터리가 포함되어 있다고 자주 얘기합니다.
이번에는 파이썬이 어떤 용도로 많이 쓰이는지에 대해서 알아보도록 하겠습니다.
프로그래밍 언어를 선택할 때는 자신에 목적에 맞는 언어를 선택하는 것이 아주 중요합니다. 그러기 위해서는 그 언어의 특성과 장점을 잘 알아야합니다.
파이썬은 다방면에 널리 사용되는 이유로 우리가 맥가이버 칼이라고 부르는 swiss army knife라는 별명을 가지고 있습니다. 파이썬 하나만 정통하면 다른 프로그래밍 언어로 할 수 있는 거의 대분분을 파이썬으로 할 수가 있습니다.
가장먼저 파이썬이 가장 많이 쓰여지는 곳은 웹개발 분야입니다. 많은분들이 웹개발이라고 하면 자신의 홈페이지를 만들어 사진을 올리고 예쁘게 장식하는 것을 상상하시겠지만 아쉽게도 파이썬으로는 그런것들을 할 수가 없습니다.
웹개발은 크게 프론트엔드 개발과 백엔드 개발이라는 두 가지 분야로 나누어지고 웹 디자인은 프론트 엔드 개발안에 포함된다고 보시면 됩니다. 프론트엔드 개발은 클라이언트 사이드, 즉 웹 사용자가 웹브라우져에 통해서 사용하는 유저 인터페이스를 개발하는 것을 말합니다. 프론트엔드 개발자가 되기 위해서는 HTML, CSS, JavaScript를 기본적으로 아셔야 하시고, Bootstrap, AngularJS등과 같은 프론트엔드 개발에 많이 사용되는 프래임워크를 공부하셔야 합니다.
그럼 백엔드 개발은 뭘까요? 말 그대로 웹 사용자가 볼 수 없는 뒤편 즉 클라이언트 사이드의 반대인 서버 사이드의 개발을 하는 것을 말합니다. 서버사이드라 함은 크게 서버, 어플리케이션 그리고 데이터베이스를 말합니다. 쉽게 설명을 드리면, 여러분이 페이스북에서 자기의 계정을 만들고, 글을 올리거나 사진과 비디오를 업로드를 한다고 했을때, 사용자의 정보를 어떻게 데이터베이스에 저장을 하고, 업로드된 사진과 비디오가 어디에 저장을 할 건지등을 어플리케이션을 통해서 관리를 해야 하는데 백엔드 개발자는 이러한 데이터베이스의 디자인부터 어플리케션의 개발까지를 담당하는 것입니다. 백엔드 개발에서 사용되는 언어는 파이썬을 포함하여 여러 가지 언어가 사용되고 있는데요, 요즘 인기가 많은 PHP와 Ruby가 있고, 다음으로 Java, C#등이 있습니다. 이 중에서 저는 개인적으로 파이썬을 가장 선호하고 있습니다. 그리고 프론트 엔드와 백 엔드 개발을 모두 할 수 있는 개발자를 full-stack 개발자라로 합니다.
두 번째로 파이썬을 사용할 수 있는 곳은 GUI를 이용한 desktop application 분야입니다. 파이썬의 스탠다드 라이브러리인 tkinter를 시작하여 PyQt, PyGUI등 여러 가지 라이브러리가 있는데 저는 주로 PyQt를 사용하는데, 초보자들에게는 tkinter로 GUI개발 공부를 시작하는 것을 권장하지만, 조금 고급 개발자가 되시면 tkinter보다 조금은 어렵지만 더 강력한 기능을 가진 PyQt의 사용을 권장합니다.
세 번째로 파이썬이 사용되는 곳은 서버 자동화 분야입니다. 파이썬은 거의 모든 리눅스 배포판과 맥북에 기본으로 설치되어 있습니다. 서버 관리자들 사이에서의 파이썬에 대한 인기도는 날로 높아지고 있으며, 간단한 스크립트부터 시작하여 쉡스크립트로 만들기 힘든 복잡한 프로그램등이 파이썬으로 만들어지고 있습니다. 또한 파이썬 라이브러리인 fabric과 프래임워크인 Ansible의 등장으로 서버 자동화 분야에서의 파이썬의 위치는 점점 더 높아지고 있습니다.
파이썬은 이 밖에도 서버가상화, 데이터 분석, 게임 개발등에서도 널리 사용되고 있습니다.
파이썬기초 강좌의 첫 번째 강좌는 여기서 마치고, 두 번째 강좌인 "파이썬 설치하기"에서 윈도우 머신과 맥 머신에 각각 파이썬을 설치하여 보도록 하겠습니다.