PHYTHON

1. 파이썬 시작 - 파이썬이란?

funfunweb 2024. 2. 14. 16:49
hello = "world!"

개요

 

파이썬은 1991년 귀도 반 로섬(Guido van Rossum)에 의해 만들어진 인터프리터 프로그래밍 언어이다. 직관적이고 쉬우며 특징과 다양하고 풍부한 라이브러리들을 바탕으로 한 강력한 생태계를 가지고 있어 프로그래밍 교육, 인공지능, 데이터 분석 및 빅데이터, 백엔드, 프론트엔드, 웹 스크래핑 등 다양한 분야에서 사용되며, 이에 힘입어 2023 TIOBE 인덱스 기준 프로그래밍 언어 순위 1위이기도 하다.

 

실행할 수 있는 의사 코드(Executable pseudocode)라고 불릴 정도로 문법이 단순하며 매우 미려하다. 때문에 초보자들이 프로그래밍을 할 때 많이 추천하는 언어이기도 하다. 그럼에도 사용률과 생산성, 실무에서의 사용성도 높기에 실무에서도 활발하게 사용되고 있다. 이는 APL이나 BASIC과 같은 교육용으로 사용되는 다른 언어들과의 차별점이기도 하다.

 

 

파이썬은 주요 언어 중 가장 초보자 친화적인 특성이 강하기 때문에, 교육용 프로그래밍 언어로 각광받고 있다. 현재 세계 유수의 대학교들은 프로그래밍 개론에서 쓰이는 언어를 C, C++나 Java에서 파이썬으로 바꾸었다.


한국 서울대, 포항공대 고려대와 같은 곳에서도 파이썬을 사용해 프로그래밍을 가르치고 있다.

객체 지향 프로그래밍을 배울 때 추천할 만한 언어이다. 주로 사용되는 문자열 변환, 배열 관련 연산 등은 파이썬에서 따로 임포트할 필요 없이 자료형 자체가 이미 클래스로서 편리하게 클래스 함수를 던져주기 때문에, 클래스의 재활용이라는 측면을 훨씬 이해하기 쉽다.

  

 

들여쓰기 기반 코드 블록 처리

대부분의 다른 언어에서는 중괄호를 블록 단위로 사용하지만, 파이썬에서는 중괄호 대신 들여쓰기를 사용한다. 이 들여쓰기 문법은 시각적으로 파이썬과 다른 언어가 구분되는 특징이기도 하다. Lex Fridman과 진행된 귀도의 인터뷰에 따르면 공백은 가독성에 중요한 영향을 끼치며, 코드가 무슨 일을 하는지 알기 어렵게 되기 때문에 필수적이라고 하였다.

같은 인터뷰에서 귀도는 중괄호가 파이썬의 스타일이 될 수 있던 가능성이 있냐는 질문에 그렇다라고 답변하고 귀도는 오랫동안 들여쓰기 방식이 더 좋은 방식이라고 생각하고 지금도 문맥을 제외하면 들여쓰기 방식이 더 좋은 방식이라고 생각하지만 많은 다른 프로그래밍 언어들이 중괄호를 사용하는 지금의 상황에 비추어 보았을 때는 중괄호도 좋은 방법일 수 있다고 암시했다.

 

순수 객체 지향

Python에는 원시 타입(Primitive Type)이 존재하지 않으며, 클래스, 함수를 비롯한 모든 것이 객체로 취급된다.
다만 이를 파이썬이 객체 지향만 지원한다고 오해하지는 않도록 유의해야 한다. 파이썬은 멀티 패러다임 언어로, 절차적 프로그래밍, 함수형 프로그래밍, 객체 지향 등 다양한 패러다임을 모두 지원하는 언어이다.

속도에서 약간의 희생되는 부분이 있었지만 덕분에 프로그래머는 더욱 편리하게 객체로서 정수를 비롯한 여러 타입들을 사용할 수 있다.

 

변수 선언의 부재

파이썬은 여타 다른 언어들과 달리 변수 선언이 없다.
예를 들어 Rust는 다음과 같이 변수 선언을 해야 하지만

let mut hello = "world!";

 

파이썬의 경우에는 따로 선언을 하지 않는다.

hello = "world!"

 

이는 초보자들이 파이썬을 쉽게 접근하는 데에 도움이 되고, 변수 선언과 관련된 오류를 피할 수 있어 도움이 된다.

변수 재할당 금지하는 방법 역시 제공하지 않고, 작명 규칙이나 타입 힌트와 같은 것으로 사용자에게 상수라는 정보를 전달한다

 

from typing import Final

# 작명 규칙을 이용한 상수 표기
HELLO = "world!"
# 작명 규칙과 타입 힌트를 이용한 상수 표기
HELLO_WORLD: Final = "hello, world!"

# 상수 표기는 단순한 convention이기 때문에 재할당도 가능하다.
HELLO = 3

 

장점

 

파이썬의 아이덴티티. 높은 생산성은 그 무엇과도 비교할 수 없는 파이썬만의 특징이다. 쉬우면서도 다양한 패키지 생태계를 통한 범용성까지 갖춘 프로그래밍 언어는 찾기 힘들다.

인터프리터 언어이고 우수한 자료형과 다양한 모듈 등을 기본으로 제공해 개발 기간이 단축되는 것이 특징.

파이썬은 다른 언어와 함께 잘 작동하며, 이와 같은 특성 때문에 glue language라고 불리기도 한다. 예를 들어 C++로 구현되어 있지만 파이썬에서 사용할 수 있는 OpenCV나 C와 C++로 구현된 NumPy 등 다른 언어로 구현된 후 파이썬으로 사용할 수 있도록 만들어진 라이브러리는 파이썬 생태계에서 중요한 축을 담당한다. 이러한 패키지들은 파이썬의 높은 생산성의 장점은 그대로 가지면서 동시에 높은 속도까지 가질 수 있어 장점이 많다.

Traceback도 개발 속도에 한몫한다. 예전에 파이썬과 많이 비교가 되던 Perl 은 스택트레이스를 보여주지 않았기 때문이다. 반면 파이썬은 코드를 실수로 잘못 짠 곳이 있다면, 어떤 어떤 파일의 어떤 줄에서 어떤 함수에서 어떤 종류의 문제가 발생했는지 자세하게 알려준다. 꽤 많은 양의 메시지를 한꺼번에 보여주기 때문에 초보자에게는 당황스러울 수 있지만, 디버깅 시에는 정말 편리하다. 아래는 오류(Exception) 발생 시의 터미널 출력 예시다. 파이썬 이후에 나온 인터프리터 언어들은 스택트레이스와 오류 줄을 표시한다.

빠른 아이디어 구현이 생명인 데이터 과학 분야나 간단한 스크립트 및 자동화 분야에서 각광을 받고 있다.

동적 타입 언어이기에 성능이나 유지보수 면에서는 단점이 지적되고 있지만 대신 3.5버전부터 타입 힌트를 지원하며 유지보수 문제는 많이 해결되게 되었다.

 

단점

파이썬은 배포를 하는 과정이 복잡하고 파편화되어 있다. 파이썬의 경우 스크립트 언어이기 때문에 실행하려면 무조건 파이썬이 설치된 환경을 만들어야 하고, 그 과정에서 환경 변수 설정이나 개발 환경 설치를 요구하기도 한다. 파이썬 설치 또한 쉽지 않은데, 운영 체제가 무엇인지에 따라 설치 방법이나 주의해야 할 점 등이 모두 다르다. 이러한 단점은 스크립트 언어들에서는 공통적으로 나타나는 특징이기는 하나, 파이썬의 경우 사용자층이 매우 다양하고 개발자가 아닌 경우도 매우 많기 때문에 이러한 문제들이 더욱 부각된다.

이런 설치 과정을 줄이는 방식 중 하나로 py2exe, Pyinstaller, cx_Freeze, PyOxidizer와 같이 파이썬 자체와 사용된 패키지 모두를 하나의 exe로 묶는 방식에 사용되고 있다. 하지만 공식 지원이 아닌 써드 파티 패키지[9]이기 때문에 일부 패키지들과 호환되지 않는 문제가 발생할 수 있고, 특히 용량이 기존 파일에 비해 매우 커지는 문제가 있는데, 간단한 Hello, world! 프로그램을 C언어를 이용해 exe파일을 만들면 약 0.25 MB에 불과하지만, 파이썬과 Pyinstaller를 이용해 exe파일을 만들면 약 5.8 MB 용량의 파일이 만들어진다.

프로그램 사용자뿐 아니라 개발자에게도 파이썬 배포는 골치 아픈 작업인데, 패키징이 파이썬과 같이 만들어진 것이 아닌, 중간에 개발된 것이기 때문에 애드혹이 많고 파편화되어 있다. 최근에는 pyproject.toml로 모든 설정을 몰고 Poetry와 같은 패키지를 사용하며 해결될 수 있지만 여전히 이전에 만든 튜토리얼들이 돌아다니고 초보 개발자가 하기에는 상당히 어려운 과정이다.

아이러니한 점은, 파이썬이 프로그래머들에게 쓰기 편하기 때문에 Make등의 패키지/프로젝트 관리용 스크립트로도 많이 사용된다. 즉 파이썬 자체는 패키징 도구가 난잡한데, 정작 다른 프로그램을 패키징할 때는 파이썬이 유용한 도구로 많이 쓰인다는 것.

 

파이썬은 사실 다른 언어에 비해 많이 느리기 때문에 프로그래밍 대회에서 실행시간 제한 때문에 어려움을 겪기도 한다. 코딩 테스트에서는 일반적으로 외부 라이브러리를 사용하지 못하게 하지만 일부 코딩 테스트에서는 NumPy와 같은 외부 라이브러리를 사용할 수 있도록 한다. 예를 들어 LeetCode는 NumPy를 사용할 수 있도록 허용하지만 백준은 NumPy를 허용하지 않는다.

 

느린 속도를 체감할 수 있는 경우는 코딩 테스트 때나 많은 계산을 요구하는 경우이다. 반대로 네트워크를 사용하거나 파일 입출력이 많은 경우에는 파이썬과 다른 언어의 차이가 그리 크지 않다. 이를 io bounded task라고 부르는데, io를 사용하기 위해 기다리는 시간이 대부분이기 때문에 네트워크나 파일 입출력의 속도가 중요하지 파이썬의 성능이 크게 눈에 띄지는 않는다. 또한 많은 계산을 요구하는 경우 외부 라이브러리를 통해 상당한 폭으로 개선이 가능하다.

 

개발도구

 

 

 

참고: 나무 위키

https://namu.wiki/w/Python

'PHYTHON' 카테고리의 다른 글

3. PYTHON 편집기(에디터 추천)  (0) 2024.02.14
2. 파이썬 설치  (0) 2024.02.14