파이썬 (Python)
1991년 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어
- 플랫폼에 독립적
- 객체지향적
- 인터프리터 언어: 한 줄씩 소스 코드를 해석 및 실행하여 결과를 확인할 수 있는 언어
- 동적 타이핑(dynamically typed) 대화형 언어: 실행 시간(런타임)에 자료형을 검사
파이썬의 특징
디자인 철학
- '가장 아름다운 하나의 답이 존재한다'.
- 다양한 코딩 스타일을 갖는 다른 언어들에 비해, 위의 문장을 기본으로 따르는 파이썬은 하나의 코딩 스타일로 수렴 진화하는 특성을 가진다.
- 이 철학은 Python스러움(Pythonic)이라는 개념을 낳았으며, 복잡하지 않으면서 의미가 명확하고, 코드의 축약보다 뚜렷하게 보이는 흐름을 중시해야 함을 강조한다.
- PEP 20에는 아래와 같은 Python 기본 철학이 나열되어 있다.
엄격한 문법
- 파이썬만의 디자인 철학 때문에 문법이 매우 엄격한 편
- 코드의 동작과는 별개로 가독성을 위한 코드 작성 스타일 가이드가 존재한다. ▶ PEP 8
1. 블록 처리 규칙
- Python은 들여쓰기로 코드의 끝을 구분짓는다.
- PEP 8에는 들여쓰기를 Tab 대신 공백(Space) 4문자를 넣기를 강력히 권장한다. (사용자 환경에 따라 Tab이 서로 다른 폭의 공백을 생성할 수 있기 때문)
2. 작명 규칙
- 일반적으로 스네이크 표기를 사용하되, 특정한 경우 파스칼 표기를 쓴다.
- 스네이크 표기법(Snake Case) ▶ snake_case // 패키지, 모듈, 함수, 변수, 메서드 등에 사용
- 파스칼 표기법(Pascal Case) ▶ PascalCase // 클래스, 예외 등에 사용
- 변수는 소문자로 시작하며, 내부변수는 맨 앞에 밑줄 1개로 시작하며, 숨은변수는 밑줄 2개로 시작한다.
- attribue_name = 0
- _protected_attribute_name = 0
- __hidden_attribute_name = 0
- 상수는 대문자 + 밑줄로 표현한다.
- CONSTANT_NAME = 0
3. 문법 규칙
- 한 줄은 79글자 이하로 제한하기
- import는 파일의 맨 위에 작성하며 내장 모듈과 제3자 모듈, 직접 제작한 모듈 순서로 불러오기
- 인스턴스 메서드의 첫 인자는 self로 쓰고, 클래스 메서드의 첫 인자는 cls로 쓰기
- 할당 연산자(=)의 앞뒤로 공백 넣기
순수 객체 지향
- 파이썬은 모든 것을 객체로 취급한다.
- 원시 타입(Primitive Type)이 존재하지 않는다. ▶ int, float, string 등 값을 담을 수 있는 타입
- 클래스, 함수도 객체이며, 상수 역시 상수가 저장된 객체로 본다.
- Python 공식 문서에 따르면 Python의 인자 전달 방식은 '할당에 의한 호출(Call by Assignment)' 또는 '객체 참조에 의한 호출(Call by Object Reference)'이라고 명시한다.
반복 가능한 객체
- 반복 가능한 객체(iterable)라는 강력한 기능을 제공
- iterable은 집합, 문자열, 리스트, 튜플, 딕셔너리, 함수 모두 반복이 가능하게 한다.
파이썬의 장단점
파이썬의 장점
1. 빠른 개발 속도
- "Life is too short, You need Python" - 인생은 너무 짧으니 파이썬이 필요해.
- 언어의 난이도가 낮은 덕분에, 프로그램 설계 난이도가 낮은 편이다. ▶ 높은 생산성을 갖는다.
- C언어와의 접착성이 좋아, 속도가 중요하지 않은 부분은 Python으로 빠르게 작성하고 속도가 중요한 나머지 부분은 C, C++로 작성하는 전략을 사용할 수 있다.
- 코드에 문제가 생긴 경우 Traceback으로 해당 부분에 대한 오류를 친절히 알려준다.
- 다른 사람이 만든 프로그램을 해석하기가 쉽기 때문에 많은 피드백이 오간다. 이것이 생산성 향상으로 이어진다.
2. 과학 및 공학 친화성
- Python은 과학 및 공학 분야에서 필요한 여러 기능을 제공한다.
- NumPy, Pandas, SciPy 등의 유용한 라이브러리를 무료로 사용할 수 있다.
3. 거대한 생태계
- 본인이 하고자 하는 것을 돕는 패키지가 웬만하면 인터넷에 존재한다.
- 웹사이트 서버 구현 ▶ Python Web Framework 검색 ▶ Django, Flask 등
- 기계학습 알고리즘 ▶ Python Machine Learning 검색 ▶ scikit-learn, TensorFlow, PyTorch 등
- 액셀 자동화, 파일 처리 자동화, 웹 크롤링 자동화 등 업무 시간을 단축하는 자동화 프로그램 구현에도 많이 쓰인다.
파이썬의 단점
1. 느린 실행 속도
- 동적 타입 언어, 인터프리터 언어 등의 특징을 갖는 파이썬은 C에 비해 매우 느린 실행 속도를 갖는다.
- 느린 속도 탓에 속도가 빠른 C, C++로 코드를 작성하고, 해당 코드를 Python으로 래핑(Wrapping) 작성하기도 한다. ▶ Python의 머신러닝 라이브러리인 Tensorflow 또한 내부는 C++로 작성되어 있다.
- 가장 큰 단점인 느린 실행 속도를 개선하기 위한 개발이 계속해서 진행되고 있다.
2. 일반 사용자에게의 배포가 복잡함
- Python은 프로그래머가 곧 자기가 만든 프로그램의 이용자임을 가정한다.
- 역사가 매우 긺에도(놀랍게도 Java보다 오래 되었다.) 일반 사용자에게 배포를 하는 과정이 덜 발달되었고 복잡하다.
- 'Python 프로그래머'에게 배포를 하는 방식은 몇 가지 있으나, '순수한 사용자'에게 배포하는 수단은 매우 까다롭다.
- 대부분의 언어는 '프로그래머'가 '프로그래머가 아닌 사람'을 위해 프로그램을 제작하고, 그것을 받은 사람은 개발 도구 없이 실행할 수 있다. '프로그램을 만드는 환경'과 '프로그램을 돌리는 환경'이 구분되어 있다.
- 하지만 파이썬은 기본적으로 'Python을 설치하고 개발 환경을 구성한 사람'이 '자기 컴퓨터나 자기가 관리하는 시스템 속에서 돌릴 프로그램'을 '직접 만들어 쓰는 것'을 목적으로 발달했기 때문에 '프로그램을 만드는 환경'과 '프로그램을 돌리는 환경'이 사실상 구분되어 있지 않다.
- 따라서 파이썬 프로그래머들은 자신이 개발했던 환경을 '알아서 잘' 포장해서 이를 전달해야 한다.
- 다른 시스템에서 프로그램을 돌리기 위해, 프로그램을 만들 때 갖췄던 환경(Python 및 패키지)을 모두 똑같이 설치해줘야 한다.
- 그 '환경'을 설치하는 과정은 기본적으로는 일반인이 아닌 프로그래머가 쓰는 것을 전제로 만들어져 있다.
파이썬에 대한 대략적인 설명은 위와 같다. 이제부터 파이썬을 사용해보자.