파이썬(Python)은 1991년 네덜란드계 프로그래머인 귀도 반 로섬이 발표한 고급 프로그래밍 언어로, 플랫폼에 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다.


위키백과에 나와있는 파이썬의 설명은 다음과 같다.

  1. 고급 프로그래밍 언어
  2. 플랫폼에 독립적
  3. 인터프리터식
  4. 동적 타이밍, 대화형 언어

고급 프로그래밍 언어

고급 프로그래밍언어는 사람이 이해하기 쉽게 작성된 프로그래밍 언어로, 고급 프로그래밍 언어로 작성된 코드는 컴파일러와 인터프리터로 로우 레벨 프로그래밍 언어(기계어 & 어셈블리어)로 번역되어 실행된다.

플랫폼에 독립적이다.

파이썬은 어떤 운영체제 이든 상관없이 사용할 수 있다. 처음 파이썬 버전은 매킨토시에서 사용될 목적으로 개발이 되었지만, 지금은 다양한 플랫폼(OS)에서 동작이 가능하도록 되었다. but, 안드로이드/iOS에서는 동작이 불가능.

  • 마이크로소프트 윈도우(9x/NT 계열은 최신판, 3.1 및 MS-DOS는 옛 버전만)
  • 매킨토시(맥 OS 9 이전, 맥 OS X 이후 포함)
  • 각종 유닉스
  • 리눅스
  • 팜 OS
  • 노키아 시리즈 60

인터프리터식

고급 프로그래밍언어가 실행되는 방식에는 다음 3가지 방식이 있다.

  1. 인터프리터식(해석)
  2. 컴파일
  3. 소스 to 소스 번역

파이썬은 1. 인터프리터식에 해당하며, 컴파일 과정 없이 언어의 문법을 읽고 직접 실행되는 것을 말한다. 하지만, 파이썬이 동작하는 방식을 알아보면 얘기가 달라진다.

파이썬은 인터프리터를 사용하지만, 실제로는 컴파일러와 인터프리터를 모두 사용하는 언어이다. 첫째로, 파이썬 소스 코드는 바이트 코드(byte code) 중간 표현의 코드로 일관 변환된다. 바이트 코드는 고급 or 저급 프로그래밍 언어(기계어/어셈블리어)는 아니나 기계어로의 변환되는 속도가 빠른 특징이 있다. 둘째로, 소스 코드를 이러한 바이트 코드로 일괄 해석을 한 후(컴파일), 파이썬의 인터프리터로 바이트 코드를 라인별로 해독, 실행(인터프리트)한다.

but, 사용자의 설정에 따라 완전한 컴파일 방식으로도 활용 가능(JIT 컴파일러)

왜 인터프리터 언어의 성능이 떨어질까
CPU가 실행할 수 있는 명령은 모두 네이티브 코드인 CPU 인스트럭션(명령어 or 명령) 뿐이다. CPU Instruction은 기계어와 어셈블리어로 이루어져 있으며, 대부분의 고급 프로그래밍 언어는 번역이 필요할 것이다.

소스코드로부터 출발해, 기계어 코드가 실행되는 과정에서 가장 많은 자원이 소모되는 것은 소스코드를 분석하는 작업이며, 사전적인 의미의 "인터프리터식" 언어는 한 라인씩 해석한 후 실행하기 때문에 성능이 떨어질 수 밖에 없을 것이다.

## 컴파일러는 소스코드 전체를 기계어, 중간 표현(바이트 코드)로 일괄 변환 후, 실행

동적 타이핑 언어

동적 타이핑 언어는 프로그램의 실행 시점에서 각 프로그램 변수 타입을 결정하는 언어를 말한다. 동적언어와 정적언어의 예를 통해서 이해를 쉽게 할 수 있다. [정적언어, C]

int num = 1; // 컴파일 성공
float num2 = 1.03; // 컴파일 성공
bool num3 = 1; // 컴파일 에러

[동적언어, Python]

num1 = 10;
name = "Evan Hwang"

“정적언어”는 자료형을 컴파일 시에 결정하는 것. C, C#, C++, Java 등의 언어가 정적 타이핑 언어이다. 컴파일 시에 자료형에 맞지 않은 값이 들어있으면 컴파일 에러가 발생한다. 장점 : 컴파일 시에 타입에 대한 정보를 결정하기 때문에 속도↑ , 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입의 안정성↑

“동적언어”는 JavaScript, Ruby, Python, SmallTalk 등의 언어로서, 컴파일 시 자료형을 정하는 것이 아니고 실행 시에 결정한다. 자료형 명시 없이 변수만 선언하여 값을 지정할 수 도 있다.

그 외의 특징

파이썬에서는 “들여쓰기”를 사용해서 블록을 구분하는 독특한 문법이 있다. 파이썬의 핵심 철학 중, 가독성과 관련된 철학이 적용되는 문법이 아닌가 생각된다.

하지만, 프로그래머의 코딩 스타일을 제한한다는 비판도 있다.


Reference

https://ko.wikipedia.org [https://m.blog.naver.com/pisibook https://soooprmx.com