Python 카테고리를 새로 생성했다. 언어론을 조금 배우며 더 나은 설명이 떠오른 부분도 많았고, 입문자를 너무 고려한 탓에 어려운 개념을 일부 배제하느라 제대로 설명하지 못한 부분도 있었다. Python-New 카테고리는 파이썬에 대해 조금 더 확실하고 명쾌한 설명을 블로그에 올리기 위해 생성하게 됐다. 기존 파이썬 카테고리와 설명이 일부 겹칠 수도 있으나, 적어도 설명이 줄어들진 않을 예정이다.

Java, C# 등 대부분의 주류 프로그래밍 언어들처럼 Python도 C로 구현되었다. Python은 아래와 같은 특징을 가진다.

  • 오픈 소스
  • 인터프리터
  • 별도의 entry point가 없는 스크립트 언어
  • 동적 검사, 암시적 형변환이 없는 강타입, 동적 타이핑
  • 암시적 타입 추론
  • 타입 명시를 지원
  • 멀티 패러다임이면서, class로 객체지향을 표현. 다중 상속 허용
  • 연산자 오버로딩 존재
  • Reference counting과 가비지 컬렉션 기반의 메모리 관리
  • 공식 코드 컨벤션 가이드라인 존재(PEP8)
  • optional한 세미콜론(그러나 자바스크립트 스타일의 optional과는 조금 다름)
  • 대부분의 프로그래밍 언어들처럼, Lexical(정적) scoping
  • function level scoping
  • 의존성 관리와 가상 환경 구성에 대한 지원이 npm만큼 강력

그리고 파이썬의 높은 생산성에 도움을 주는 몇가지 syntatical sugar와 기능들이 존재한다.

  • for statement는 foreach로만 사용 가능
  • 비교 연산자 chaining 가능(a < b < c)
  • switch가 없음
  • 가독성을 위해, 논리 연산자에 기호가 아닌 키워드를 사용(&&를 and로, ||를 or로, !를 not으로)
  • 매직 메소드로 인해 생겨나는 강력한 데이터 모델
  • 매우 큰 라이브러리 생태계
  • Glue language라는 개념을 통해, 타 언어와의 바인딩이 쉬움

문화, 강력한 직관성

내가 파이썬을 좋아하는 이유는, 바로 '가장 아름다운 하나의 답이 존재한다'라는 명제와 코드가 영어 아티클처럼 읽히는 강력한 직관성 때문이다. 높은 생산성과 가독성이 나오는 것도 이 때문이다. 인간의 생각을 코드로 가장 쉽게 표현할 수 있도록, 파이썬은 '쉬운 언어'로 진화해 왔다. PEP8이라는 스타일 가이드에 의해 코드 스타일도 단 하나의 스타일로 진화되어 왔다. JavaScript 진영에서 수많은 코드 스타일이 존재하는 것과 사뭇 다르다. '정해진' 것들이 있기 때문에 선택지는 좁을지 몰라도, 가이드라인만 따르면 코드를 확실하게, 정교하게, 가독성 높게 작성할 수 있다.

또한 언어 자체가 웬만하면 가독성이 높을 수밖에 없게 설계되어 있다. 아래의 코드 스니펫을 보면 파이썬이 얼마나 직관적인지 알 수 있다.

파이썬은 쉽다?

파이썬은 쉬운 게 맞다. 진입장벽이 낮기도 하고, 애초에 '쉬운 언어'를 만들고자 하는 의도로 만들어진 언어기 때문이다. 그러나 잘 쓰기는 어렵다. 예를 들어, 숫자들이 공백으로 구분되어 있는 문자열에서 최소값을 출력하는 코드는 아래와 같이 작성할 수 있다.

이 코드는 아래처럼 개선할 수 있다.

아래와 같은 방법도 있다.

발상의 전환이나, '이 코드가 최선인가'하는 압박이 다른 언어들보다 더 많아서, 번아웃이 오는 빈도도 많다. 따라서 우리가 취해야 할 폼은, 책 하나 다 읽었다고 '다 끝났다'라는 생각을 하지 말아야 하는 것이다. 적어도 프로그래밍 언어를 '다 안다'라고 할 수는 없으니 말이다.

구현체

Python에는 여러 구현체들이 있다. 다른 언어를 하던 프로그래머 입장에서는 'Java 7, 8, 9같은 차이겠거니' 할 수 있다. 그러나 여기서 이야기하고자 하는 건 표준 배포판인 CPython이 C로 개발되는 것과 다르게, 아예 다른 프로그래밍 언어를 이용해 구현된 파이썬이다. 이게 다 파이썬이 오픈소스여서 가능한 일이다. 파이썬 배포판의 대부분도 오픈소스로 개발되고 있다.

CPython

'파이썬'이라고 하면 대부분 CPython을 뜻한다. 파이썬 재단에서 인정하는 표준 구현체이며, python.org에 들어갔을 때 보이는 예제들이나 'Download Python'도 CPython을 기준으로 한다. Python 코드를 바이트코드로 컴파일하고, 그 결과를 VM이 해석하는 방식을 사용한다.

Cython

정적 컴파일러 최적화다. Type mixin이라는 개념을 통해 C나 C++ 모듈로 컴파일한다.

IronPython

.NET FrameworkMono 기반에서 작동할 수 있도록 C#으로 개발된 파이썬이다.

Jython

JVM 기반에서 작동할 수 있도록 Java로 개발된 파이썬이다.

배포판

이것도 다른 언어를 하던 프로그래밍 입장에서는 이해하기 어려울 것이다. 파이썬은 사용하는 대상의 스펙트럼이 매우 넓기에(머신러닝, 웹 서버, 데이터 분석 등) 특정 집단을 타겟으로 하는 별도의 배포판이 존재한다. 데이터 과학을 위한 Anaconda, ActivePython, Enthought Canopy, WinPython 등이 그 예다.

설치

Java 8, 9, 10처럼, 파이썬도 버전 개념이 존재한다. Python 2Python 3가 대표적인 메이저 버전이다. 별다른 이유가 없다면, Python 3을 사용하는 것이 좋다. 애초에 Python 3가 Python 2에서 지적된 여러 단점들을 제거하기 위해 만들어졌기 때문이다. Python 3가 나온 지 얼마 안 됐던 때에는 대부분의 라이브러리가 Python 2만을 지원했었기에 Python 3를 꺼려하는 개발자가 많았지만, 요새는 그런 경우가 거의 없다.

Windows

Windows의 경우에는 공식 페이지인 python.org에서 설치할 수 있다. 별도로 설정을 건드리지 않으면 PATH도 알아서 잡아 주므로 터미널에서 python 명령을 입력했을 때 인터프리터가 정상적으로 동작하면 설치에 성공한 것이다.

$ python

Mac

Mac은 Linux 기반의 운영체제기에, 기본적으로 파이썬이 설치되어 있다. Mac을 비롯한 리눅스, 또는 리눅스 기반 운영체제들은 Python 2와 Python 3를 별도로 관리함에 주의해야 한다. 터미널을 기준으로 하면, Python 2는 python, Python 3는 python3 명령을 사용한다.

$ python
$ python3


'프로그래밍 > Python' 카테고리의 다른 글

산술 연산자  (0) 2019.01.28
숫자 자료형과 리터럴  (0) 2019.01.25
파이썬의 타입 시스템과 빌트인 타입, 변수 선언  (0) 2019.01.23
주석  (0) 2019.01.07
Hello World, 세미콜론은 optional하다?  (0) 2019.01.03

+ Recent posts