*최근 회사에서 Python을 사용하게 되었는데 특징을 너무 모르는거 같아서 정리할겸 글을 작성하게 되었습니다.
-요약-
1. 파이썬 특징: 스크립트 언어, 동적 타입 언어, 플랫폼 독립적
2. 장점: 사용이 쉬움, 빠른 개발속도, 높은 확장성 및 이식성
3. 단점: 느리다(컴파일 언어에 비해) + GIL
파이썬은 전공자는물론 비전공자에게도 사랑받는 아주 인기있는 언어입니다. 특히, 최근들어 데이터 분석을 python으로 많이 하게 되면서 더욱 인기를 끌고 있죠.
1991년 귀도 반 로섬(Guido van Rossum)이라는 프로그래머에 의해 개발된 언어인 python은
이 두가지 이유로인해 많은 사람들이 편하게 사용하고 있습니다.
다만, 단순이 배우기 쉽다는 이유만으로 언어를 제대로 사용하기에 문제가 있다고 판단되어 아래에 한번 그 특징 및 장/단점을 정리해 보겠습니다.
파이썬은 스크립트 언어로 컴파일 과정없이 인터프리터에 의해 실행 결과를 바로 확인하고 수정하며 코드를 작성할 수 있습니다.
*컴파일(Compile)
컴파일이란 인간이 작성한 코드를 컴퓨터가 이해할 수 있도록 기계어(바이너리 코드)로 번역하는 과정을 의미합니다.
즉, C++나 Java와 같은 언어로 코드를 작성하면 컴퓨터가 이해할 수 있도록 해당 코드를 컴파일하여 기계어로 번역하게 됩니다.
이후 실행할 때 기계어로 번역된(컴파일된) 파일을 실행하는 원리입니다.
반면, 스크립트 언어는 이런 컴파일 과정 없이 실행과정에서 번역과 실행이 동시에 일어나므로,
수정이 빠르지만 컴파일 언어보다 느린 실행속도를 보여줍니다.
파이썬은 동적 타입언어로 변수의 자료형을 지정하지 않고 선언하는 것만으로 값을 지정할 수 있습니다.
이렇게 선언한 변수의 자료형은 코드가 실행되는 시점에 결정됩니다.
#Java
int a = 10
#Python
a = 10
이런 점은 개발당시에는 편할 수 있지만, 코드 실행 도중 예상치 못한 타입으로 에러가 발생할 수 있다는 단점이 있습니다.
파이썬은 대부분의 운영체제에서 모두 동작하는 언어입니다. 윈도우, 리눅스, 맥 등 운영체제에 따라 컴파일할 필요가 없기때문에 어떤 환경에서도 활용이 가능합니다.
파이썬은 러닝커브가 낮다는 장점을 가지고 있습니다. 인간의 사고와 유사한 면을 가지고 있어서인지 프로그래밍을 모르는 비전공자도 쉽게 배울 수 있습니다.
'Hello World'라는 문장을 출력할 때 Java와 Python을 비교해보면 아래와 같습니다.
#Java
public class Solution {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
#Python
print("Hello World")
파이썬은 생산성이 높습니다. 즉, 쉽고 간결한 문법 덕분에 빠르게 개발이 가능하며 더 적은 코드로 더 많은 작업 수행이 가능합니다. 또한, 복잡한 구문으로 인한 오류 발생을 줄일수 있습니다.
파이썬은 다른 언어나 라이브러리에 쉽게 접근해 연동이 가능합니다. 고성능 어플리케이션이 필요한 경우 C/C++언어와 결합해 사용이 가능합니다.
파이썬은 수많은 라이브러리 뿐만 아니라 오픈소스를 통해 많은 개발자들이 사용하는 언어를 그대로 사용할 수 있습니다. 최근에 개발되는 머신러닝 라이브러리, 오픈소스 대부분도 파이썬으로 개발되어 제공되는걸 보면 얼마나 생태계가 활발한지 알 수 있습니다. 이 또한, 빠른 개발뿐만아니라 많은 사람들과 협업이 가능하다는 장점또한 가지고 있습니다.
스크립트 언어의 특징을 설명하면서 잠깐 언급했는데, 파이썬은 다른 컴파일 언어에 비해 느립니다.
아무래도 실시간으로 기계어로 번역하다보니 이런 단점이 발생하며, 따라서 빠른 속도를 요구하거나 하드웨어를 직접 컨트롤 하는 프로그램에는 적합하지 않은 언어라고 볼 수 있습니다.
*이 부분은 개발자에게 좀 더 특화된 내용으로 어렵다면 넘어가시는걸 추천드립니다.
GLI는 Global Intepreter Lock의 약자로 하나의 스레드에 모든 자원을 허락하고 나머지 스레드에 락을 걸어 다른 스레드가 실행되지 않도록 막아버리는 기능입니다.
문제는 이게 싱글코어 뿐만 아니라 멀티코어에서도 막아버려서 멀티코어서 멀티 스레드를 사용하는 장점이 막혀버리는 문제가 발생합니다.
보통 멀티코어로 멀티 쓰레드를 사용한다면 아래의 그림을 예상하게 됩니다.
하지만 파이썬에서는 멀티 코어라고 해도 GIL때문에 아래처럼 동작한다고 보시면 됩니다.
심지어 스레드의 Context Swithing때문에 멀티쓰레드를 사용하면 성능이 더 느려지는 현상이 발생합니다.
그렇다면 아래와같은 의문이 생길 수 있습니다.
결론부터 말씀드리자면 병렬작업도 가능하고 멀티스레드도 활용이 가능합니다.
Python에서 병렬작업은 불가능한가?
병렬 작업은 Multi Processing 모듈을 사용하면 가능합니다.
Python에서 멀티스레드는 의미가 없는가?
아닙니다. GIL는 cpu동작에서 적용되는걸 말하며 cpu동작을 마치고 I/O작업을 실행하는 동안에는 다른 스레드가 동시에 동작할 수 있습니다. 즉, cpu작업이 적고 I/O작업이 많은 병렬 처리 프로그램에서 유용하게 사용할 수 있습니다.
Proces와 Thread의 차이점, GIL에 대해서 좀 더 다뤄보고 싶지만 내용이 너무 길어질 것 같아서 다음 글에서 따로 정리하는 글을 포스팅 하도록 하겠습니다.
출처:
https://library.gabia.com/contents/9256/
https://wangin9.tistory.com/entry/pythonthreadGIL
https://ssungkang.tistory.com/entry/python-GIL-Global-interpreter-Lock%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
https://monkey3199.github.io/develop/python/2018/12/04/python-pararrel.html
너무 좋은 글이네요