파이썬의 장점과 단점은 파이썬이 가지고 있는 문법적 특징과 크게 연관 되어있다. 파이썬의 첫번째 장점으로 가독성이 높고 읽고 쓰기 쉬운 언어라는 특징을 가진다. 이는 파이썬의 문법적 특징인 스크립트언어와 관련이 있는데, 스크립트 언어란 매우 빠르게 작성된 코드를 실행하기 위하여 고안된 언어로 일반적으로 단순한 구문과 의미를 내포한다. 또한 파이썬은 컴파일 과정 없이 소스코드를 바로 읽어가며 실행하는 인터프리터 언어이기도 하여 다른 컴파일 언어에 비해 컴파일과정을 생략하고 디버깅이나 코드 수정이 쉽고 빠르다. 이러한 특징들 덕분에 파이썬은 다른 언어들에 비해 비교적 가독성이 좋고 읽고 쓰기 편하여 프로그래밍을 처음 접하는 초심자들에게 인기가 많은 편이다.
다음 장점으로는 파이썬은 동적타입언어로 정의되는데 이는 다른 언어와 달리 값을 지정할 때 변수의 자료형을 따로 선언하지 않아도 된다는 점에서 개발이 편리하다는 장점을 가진다. 예를 들면 자바와 C언어 같은 정적언어인 경우는 코드를 생성할 때 각 변수의 자료형을 직접 선언해주어야 하지만 파이썬은 동적 프로그래밍 언어로 자료형 선언 없이 컴파일 과정에서 결정한다. 개발이 용이하다는 점에서 마찬가지로 파이썬은 쉽다고 생각할 수 있다.
세번째 장점으로는 파이썬은 높은 확장성과 접착성을 가진다. 비교적 간단한 문법과 다양한 라이브러리를 활용하여 쉽고 빠르게 개발할 수 있으며 대규모 응용 프로그램을 작업시에 C/C++언어와 붙여 쓰기도 하는 등 확장성 및 이식성도 훌륭하다. 이런 특징을 가진 파이썬을 접착언어(Glue language)라고도 부른다. 다양한 라이브러리를 통해 확장성도 뛰어날 뿐 아니라 독립된 언어로써 다양한 운영체제를 지원한다. 윈도우, 맥OS, 리눅스 등 어디서든 사용이 가능하다.
다음으로 파이썬은 객체 지향언어의 특징을 가진다. 객체지향 프로그래밍이란 프로그래밍에서 필요한 데이터를 추상화하여 독립적인 상태와 의미를 가진 하나의 객체로 여겨, 프로그램을 객체들의 구성과 여러 객체들간 상호작용을 통해 만드는 프로그래밍 방법이다. 순차적으로 진행하여 코드를 써 내려가는 절차지향 언어와 달리 객체지향언어는 프로그램을 구성하는 부분을 여러 객체로 나누어 코딩을 하기 때문에 디버깅시에 유지보수가 쉽고, 다른 사람이 만든 코드를 사용하여 프로그램을 구성하는 등 재사용이 용이하다.
파이썬에 관한 여러 라이브러리와 자료 등이 넷 상에 방대하기 때문에 이는 개발에 있어 장점이 될 수 있다. Mataplotlib(데이터 시각화), PyTorch(머신/딥러닝) 라이브러리를 예로 들 수 있다. 파이썬이 가지는 문법적 특징으로 생기는 장점들 외에도 파이썬은 복소수 범위를 지원하기 때문에 다른 언어보다 과학 및 공학분야에 친화적이라 할 수 있다. 복잡한 수치나 큰 값을 처리할 때 알맞은 라이브러리를 활용하여 데이터를 처리하고 이를 그래프나 3d모델링 할 수 있는 라이브러리 또한 존재한다. 이처럼 파이썬은 거대한 생태계를 구축하고 있을 뿐만 아니라 오픈소스로 제공되어 누구나 무료로 접근할 수 있다.
위와 같은 파이썬의 장점들은 어떤 부분에서는 단점이 될 수도 있다. 우선 파이썬이 가지는 스크립트 언어의 특징은 명확한 시작포인트가 없어서 함수 구성에 있어 일정부분 가독성이 오히려 떨어지는 경우도 생긴다. 마찬가지로 파이썬이 가지는 인터프리터 언어의 특징은 다른 컴파일 언어에 비해 실행속도가 느리다는 단점이 있다. 실행속도가 느리다는 점이 파이썬의 대표적인 단점으로 꼽을 수 있는데, 그 이유는 파이썬이 인터프리터 언어이기 때문에 실시간으로 결과를 확인하며 실행속도가 느려지기도 하고 파이썬은 GIL(Global Interpreter Lock)이라는 개념을 가지고 있기 때문이다. GIL은 CPU 다수의 스레드가 동시에 바이트코드를 실행하는 것을 막는다. 스레드 안정성을 위하여 제한한다고 하는데 이는 성능 병목현상을 발생시키고, 파이썬의 실행 속도를 상당히 늦추고 병렬작업의 큰 장벽이 된다.
또한 파이썬은 실행속도가 느린 것과 더불어 대규모 프로그램에서 과한 메모리 사용으로 리소스 분배에서 문제가 발생하기도 한다. 앞서 파이썬의 동적타입 언어 특징은 프로그래밍을 수월하게 한다는 점에서 장점이 되기도 했지만 직접 변수의 자료형을 선언하지 않아서 런타임 오류가 종종 생기기도 한다.
보안성 측면에서도 파이썬은 단점을 가진다. 파이썬이 제공하는 여러 모듈 중에서 보안에 취약한 모듈을 사용하기도하고 사용되는 사용하는 함수 중에 악성코드를 심어두는 코드 인젝션 공격에 취약하다. 파이썬의 단점 중 하나인 메모리 사용 부분에서도 오버플로우가 발생하여 보안적 취약점이 발생한다.
파이썬으로 할 수 없는 영역 또한 존재한다. 대표적으로 리눅스와 같은 운영체제나 많은 반복과 연산이 필요한 작업과 매우 빠른 속도를 요구하는 프로그램에는 적합하지 않다. 파이썬의 속도는 ‘Energy efficiency across programming languages: how do energy, time, and memory relate?’ 논문에 따르면 파이썬은 C언어에 비해 71.90배의 시간, 2.80배의 메모리를 더 사용한다고 한다. 이러한 속도차이는 대규모 프로그램을 작성할 때 있어 런타임오류나 메모리 과다 사용으로 인해 적합하지 않고 하드웨어를 직접 수정하는 프로그램에도 적합하지 않다.
마지막으로 파이썬은 배포과정이 까다롭다. 인터프리터 언어이기 때문에 코드를 실행하기 위해서는 반드시 파이썬 환경이 준비되어야 하고, 추가적으로 개발환경 설정을 필요로 하기도 한다. 또한 여러 운영체제를 지원하는 파이썬이지만 운영체제마다 설치방법과 주의사항이 모두 다르다.
참고문헌
파이썬 / Y. Daniel Liang 지음 ; 길준민, 정재화 옮김
파이썬 https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%EC%8D%AC 위키피디아
동적프로그래밍 언어 https://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4
객체지향프로그래밍 https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
스크립트 언어 https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%96%B8%EC%96%B4#:~:text=%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%96%B8%EC%96%B4(scripting%20language)%EB%9E%80,%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%20%EC%96%B8%EC%96%B4%EB%9D%BC%EA%B3%A0%EB%8F%84%20%ED%95%9C%EB%8B%A4.
프로그래밍 언어 순위 2024 https://www.tiobe.com/tiobe-index/
파이썬 위키 GIL https://wiki.python.org/moin/GlobalInterpreterLock
글로벌 인터프리터 락 위키피디아
파이썬 보안문제가 끝없이 지적되는 이유는 챗GPT의 설명은? 기사 https://www.cwn.kr/news/articleView.html?idxno=15673
Energy efficiency across programming languages: how do energy, time, and memory relate? 논문
Rui Pereira, Marco Couto, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, and João Saraiva. 2017. Energy efficiency across programming languages: how do energy, time, and memory relate? In Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2017). Association for Computing Machinery, New York, NY, USA, 256–267. https://doi.org/10.1145/3136014.3136031