파이썬의 장점

서경원·2024년 1월 15일

파이썬 소개

파이썬은 1991년 귀도 반 로섬(Guido van Rossum)이라는 프로그래머에 의해 개발된 언어로, 가독성이 높고 쉬운 문법 덕택에 다른 프로그래밍 언어보다 빠른 습득이 가능하다는 특징이 있습니다.

파이썬의 특징

  1. 스크립트 언어(Scripting Language)

    파이썬은 컴파일 과정 없이 인터프리터(Interpreter, 해석기)가 소스 코드를 한 줄씩 읽어 들여 곧바로 실행하는 스크립트 언어(Script language)입니다. 그 때문에 컴파일 과정이 필요하지 않아 실행 결과를 바로 확인하고 수정하면서 손쉽게 코드를 작성할 수 있습니다.

컴파일 언어와 스크립트 언어의 차이점은?
컴파일 언어는 ‘컴파일’이라는 과정을 통해 프로그래머(인간)이 작성한 코드를 기계어로 번역해 실행하는 언어입니다.
반면 스크립트 언어는 별도의 ‘컴파일’ 과정 없이 인터프리터가 소스 코드를 한 줄씩 읽어가며 바로 실행하는 언어를 의미합니다.

컴파일 언어는 소스 코드를 컴파일하는 과정을 거쳐야 하므로 실행 및 수정에 비교적 많은 시간을 소요하지만, 한 번 기계어로 번역되면 빠른 실행 속도를 보여줍니다. 스크립트 언어는 컴파일 없이 곧바로 실행하므로 결과를 바로 확인하고 빠르게 수정할 수 있지만, 번역과 실행이 동시에 이뤄져 컴파일 언어보다 느린 실행 속도를 보입니다.

  1. 동적 타이핑(Dynamic typing)

    파이썬은 동적 타입 언어입니다. 변수의 자료형을 지정하지 않고 단순히 선언하는 것만으로도 값을 지정할 수 있습니다. 이때 변수의 자료형은 코드가 실행되는 시점에 결정됩니다. 자료형 변환 시 번거로운 과정을 거치지 않아도 된다는 장점이 있지만, 코드 실행 도중 예상하지 못한 타입으로 인한 에러가 발생할 수 있는 특징이 있습니다.

    #Java
    int a = 10
    
    #Python
    a = 10
  2. 플랫폼 독립적(Platform-independent)

    파이썬은 리눅스(Linux), 유닉스(Unix), 윈도우즈(Windows), 맥(Mac) 등 대부분의 운영체제(Operating System, OS)에서 모두 동작합니다. 운영체제별로 컴파일할 필요가 없기 때문에 한 번 소스 코드를 작성하면 어떤 운영체제에서든 활용이 가능합니다.

파이썬의 장점

  1. 빠른 개발 속도

    쉽고 간결한 문법 덕택에 파이썬은 높은 생산성을 자랑합니다. 파이썬을 활용할 경우 더 적은 코드로 더 많은 작업을 수행할 수 있으며, 복잡한 구문으로 인한 오류 발생을 줄여 그 어떤 프로그래밍 언어보다 빠른 개발이 가능합니다.

  2. 높은 확장성 및 이식성

    파이썬은 대표적인 글루(Glue) 언어(혹은 접착제 언어)에 해당합니다. 다른 언어나 라이브러리에 쉽게 접근해 연동할 수 있기 때문입니다. 높은 성능의 애플리케이션 개발이 필요한 경우 C/C++과 같은 언어를 파이썬과 결합해 사용할 수 있습니다. 이 경우 애플리케이션의 성능을 보장할 수 있으면서 동시에 별도 설치나 구성과정 없이 스크립트 언어의 장점 또한 함께 누릴 수 있습니다.

파이썬의 단점

1 느리다
스크립트 언어의 특징을 설명하면서 잠깐 언급했는데, 파이썬은 다른 컴파일 언어에 비해 느립니다.
아무래도 실시간으로 기계어로 번역하다보니 이런 단점이 발생하며, 따라서 빠른 속도를 요구하거나 하드웨어를 직접 컨트롤 하는 프로그램에는 적합하지 않은 언어라고 볼 수 있습니다.

2 GIL(Global Intepreter Lock)
*이 부분은 개발자에게 좀 더 특화된 내용으로 어렵다면 넘어가시는걸 추천드립니다.

GLI는 Global Intepreter Lock의 약자로 하나의 스레드에 모든 자원을 허락하고 나머지 스레드에 락을 걸어 다른 스레드가 실행되지 않도록 막아버리는 기능입니다.

문제는 이게 싱글코어 뿐만 아니라 멀티코어에서도 막아버려서 멀티코어서 멀티 스레드를 사용하는 장점이 막혀버리는 문제가 발생합니다.

보통 멀티코어로 멀티 쓰레드를 사용한다면 아래의 그림을 예상하게 됩니다.

하지만 파이썬에서는 멀티 코어라고 해도 GIL때문에 아래처럼 동작한다고 보시면 됩니다.

심지어 스레드의 Context Swithing때문에 멀티쓰레드를 사용하면 성능이 더 느려지는 현상이 발생합니다.
그렇다면 아래와같은 의문이 생길 수 있습니다.

Python에서 병렬작업은 불가능한가?
Python에서 멀티스레드는 의미가 없는가?
결론부터 말씀드리자면 병렬작업도 가능하고 멀티스레드도 활용이 가능합니다.

Python에서 병렬작업은 불가능한가?
병렬 작업은 Multi Processing 모듈을 사용하면 가능합니다.

Python에서 멀티스레드는 의미가 없는가?
아닙니다. GIL는 cpu동작에서 적용되는걸 말하며 cpu동작을 마치고 I/O작업을 실행하는 동안에는 다른 스레드가 동시에 동작할 수 있습니다. 즉, cpu작업이 적고 I/O작업이 많은 병렬 처리 프로그램에서 유용하게 사용할 수 있습니다.

Proces와 Thread의 차이점, GIL에 대해서 좀 더 다뤄보고 싶지만 내용이 너무 길어질 것 같아서 다음 글에서 따로 정리하는 글을 포스팅 하도록 하겠습니다.

profile
멋진 사나이

0개의 댓글