본문 바로가기

Python

Python이라는 언어

Python이라는 Programming Language

Guido Van Rossum이라는 프로그래머에 의해 개발된 언어로 오픈소스 언어다. 그래서 오픈소스 커뮤니티에서 파이썬의 개선을 위한 의견이 공유되고(PEP), 이를 바탕으로 업데이트를 하게 되는데 이 업데이트의 최종 의사결정자를 보통 자비로운 종신 독재자라고 부른다. ( 파이썬은 귀도 반 로섬일 것이다.)

Python의 특징

  1. 플랫폼에 독립적이다.
    여기서 말하는 플랫폼은 OS정도로 생각하면 될 듯하다. Windows, Linux, Android, MacOS, IOS 등 프로그램이 실행되는 여러 플랫폼에서 큰 변화없이 python으로 짠 프로그램이 동작한다는 말이다.

  2. 인터프리터 언어
    그럼 위와같은 플랫폼 독립적인 특징이 어떻게 가능한 것일까? 먼저 인터프리터 언어에 대해서 알아야 한다. Interpreter를 번역하자면 해석기다. 즉 소스코드를 바로 해석해서 사용할 수 있다는 것이다. 더 정확한 이해를 위해서 컴파일러와 비교해보도록 하자.

    컴파일러
    - 소스코들를 먼저 번역한 후에 특정 플랫폼, 운영체제에 맞게 최적화해준다. 이렇게 나오는 번역된 파일이 있다면, 같은 운영체제에서는 어디서든 실행 가능해지는 것이다.
    - 실제로 high level language(인간이 이해할 수 있는 소스코드로 작성된)를 컴퓨터가 이해할 수 있는 low level로 바꿔준 후 실행한다. 
    - 위처럼 컴파일된 실행파일을 만들어내기 때문에 실행할 때 실행속도가 빠르지만, 이러한 파일을 만들어내기 때문에 많은 메모리를 필요로 한다. 또한, 이러한 실행파일만 있다면 다른 기기에서 (같은 운영체제를 공유하는) 실행이 쉬운 것이다.

    인터프리터
    - 별도의 기계어로의 번역과정 없어 보이게 소스코드를 실행 시점에 해석하여 컴퓨터가 처리할 수 있도록 한다. 
    - 전체적으로 실행을 위한 간단한 소스코드를 가진다.
    - 인터프리터로 분류되는 데에는 3가지 경우가 존재한다.( in Wikipedia ) 1. 소스코드를 직접 실행 2. 소스코드를 효율적인 다른 중간 코드로 변환하고, 변환된 것을 바로 실행( pycache) 3. 인터프리터 시스템의 일부인 컴파일러가 만든, 미리 컴파일된 저장 코드의 실행을 호출. ( pycache가 생기는 것을 이 3번으로 이해하면 된다. 다른 글에서 다시 언급하겠다. )
    - 이러한 인터프리터 언어는 실제로 실행할때마다 위와 같은 과정을 같이 거치기 때문에 실행 속도가 느리고, 메모리를 적게 필요로 한다.(소스코드에서) 과거에는 컴퓨터의 성능 자체가 낮았기에 실행 속도를 높일 수 있는 컴파일 언어가 주를 이뤘지만, 컴퓨터의 성능이 좋아져 컴퓨터의 시간보다 인간의 시간이 훨씬 중요해진 지금에서는 인터프리터로도 충분히 속도를 내면서 작동할 수 있다.
    - 이렇게 컴파일을 하지 않고, 인터프리터가 코드를 직접 한 줄씩 실행하는 방식을 script language라고도 한다.
    출처 : 부스트코스 최성철 교수님 Python basic 1-2 강의 교안 ( 펌을 금합니다. )

    사실 인터프리터라고 하면 각 운영체제에서 돌아가기 위해서 해석해주는 프로그램이라고도 볼 수 있다. 즉, 파이썬을 예로 들자면 파이썬 문법으로 작성된 코드를 특정 운영체제에서 실행하기 위해서는 해당 운영체제에 맞는 인터프리터 프로그램을 설치해서 알아서 번역해주는 과정이 필요하다는 것이다. ( 우리가 파이썬을 깔 때 OS에 맞게 까는 이유 ) 그래서 파이썬 같은 인터프리터 언어는 적절한 인터프리터만 해당 디바이스에 깔려있다면, 동일한 코드를 바꾸지 않고 실행할 수 있다는 것이다. 

  3. 쉽고 간단하며 다양하다.
    앞서도 말했듯 파이썬은 굉장히 이해하기 쉬운 문법을 가지고 있고, 간단히 코드를 작성할 수 있다. 이에 대해서 파이썬 개발자들 사이의 유행어가 있다고 한다. 
                                               
                                                       "Life is too short, You need Python."

    또한, 우리가 생각하는 것들을 쉽게 구현할 수 있고, 이미 많은 사람들이 구현해놨기에 다양한 라이브러리를 활용해서 훨씬 더 유용한 프로그래밍을 할 수 있다는 것이다.


  4. 객체지향 동적타이핑 언어
    객체 지향적임에 대해서는 최근의 대부분의 high level langauge가 가지고 있는 특성이니 간단히 단위 모듈(객체) 중심으로 프로그램을 작성하며, 하나의 객체는 어떤 동작을 위한 method와 attribute를 가지고 있다. 정도로 간단히 언급하겠다. 물론 파이썬의 경우 이러한 객체 지향적 관점 외에도 절차 지향적, 함수형적, 등등의 프로그래밍이 모두 가능한 Multi paradigm이라는 특징을 가지고 있다.

    중요한 점은 Dynamic Typing이라는 특징이라고 생각한다. 이는 프로그램이 실행하는 시점에서 그 데이터의 타입을 결정하는 것이다.( dynamic은 보통 실행 시점에 특정 뭔가를 하는 것을 의미한다. ) 즉, C++이나 Java처럼 변수를 사용할 때 변수의 타입을 따로 지정하지 않고,(소스코드상에서) 그 소스코드를 실행할 때 자동으로 변수의 타입을 유추해서 사용한다는 것이다. 물론 유지보수적 관점에서 static typing을 할 수도 있다.

    이게 가능한 이유에 대해서 조금더 생각해보면 C언어의 경우 변수를 선언 시 타이핑을 해줌으로써 타입의 크기만큼 메모리를 할당하는 방식인 반면 Python은 모든 것을 객체로 사용하기에 변수에 어떤 값을 넣을 때, 자동으로 객체를 검사한 후에 변수가 referencing을 하는 구조이기 때문이다. 물론 파이썬 또한 primitive data type이라는 파이썬이 처리할 수 있는 기본 자료형을 통해서 이런 데이터 타입마다 메모리가 차지하는 공간의 크기가 달라진다.

'Python' 카테고리의 다른 글

Python - Variable Length Arguments  (0) 2022.02.02
Python - Iterable / Iterator / Generator  (0) 2022.02.01
Python Scoping Rule ( by LEGB rule )  (0) 2022.02.01
Python - Call by Object Reference  (0) 2022.02.01
Python Dynamic Typing  (0) 2022.01.28