파이썬(Python) 유래

파이썬(Python)은 1990년 암스테르담의 귀도 반 로섬(Guido Van Rossum)이 개발한 인터프리터 언어이다. 귀도는 파이썬이라는 이름을 자신이 좋아하는 코미디 쇼인 “몬티 파이썬의 날아다니는 서커스(Monty Python’s Flying Circus)”에서 따왔다고 한다. (영상) 파이썬의 사전적인 의미는 고대 신화에 나오는 파르나소스 산의 동굴에 살던 큰 뱀을 뜻하며, 아폴로 신이 델파이에서 파이썬을 퇴치했다는 이야기가 전해지고 있다. 대부분의 파이썬 책 표지와 아이콘이 뱀 모양으로 그려져 있는 이유가 여기에 있다. https://wikidocs.net/4307#fn:interpret

Python 2 vs 3

현재 쓰이는 파이썬은 2000년에 발표된 Python 2와 2008년 발표된 Python 3가 있다. 둘은 기본적으로 코드 호환이 되지 않는다. 가장 큰 차이는 Python 3에서부터 유니코드(unicode)를 기본 문자로 지원하여 다국어(한국어 등)를 코드에서 자연스럽게 쓸 수 있다. (한글 변수명도 만들 수 있다.) 2010년대 중반까지만 해도 Python 2의 영향력이 컸지만 이제 거의 모든 프로젝트가 Python 3로 개발되고 있다. Python 2는 이제 정말로 은퇴를 했고 더 이상 업데이트 되지 않는다. https://www.python.org/doc/sunset-python-2/ 그래서 현재는 Python2를 배울 필요가 없고 앞으로 파이썬은 Python3 라고 봐도 무방하다. 혹시라도 인터넷에서 Python 2에 대한 내용이 보인다면 무시해도 좋다.

파이썬 설치

파이썬에 대한 자세한 소개를 하기 전에 일단 설치를 눌러놓자. 파이썬 설치파일은 (https://www.python.org/) 에서 받을 수 있다.(https://www.python.org/downloads/windows/) 여기서 윈도우용 설치파일을 받을 수 있는데 현재 (2022.3.10) 최신 버전은 3.10.2 인데 최신 버전을 설치해도 되지만 일부 패키지들이 최신 버전에서 안정화 되지 않았을 수도 있으므로 다양한 패키지들과의 호환성을 생각한다면 이전의 3.7.x 중 최신 버전을 설치하는 것이 좋다.

또한 파이썬을 위한 통합 개발환경(IDE)인 PyCharm과 가볍게 코드를 열어보기에 좋은 notepad++도 받아서 설치한다.

https://www.jetbrains.com/pycharm/download/#section=windows

https://notepad-plus-plus.org/downloads/

파이썬의 철학

가장 아름다운 하나의 답이 존재한다

파이썬은 단순한 문법을 엄격하게 적용하여 누가 작성하더라도 유사한 코드가 나오도록 유도한다. 다음은 파이썬의 미덕을 정리한 20가지 문구 중 일부이며 이러한 미덕을 지키는 코드를 pythonic 하다고 표현한다. 하지만 실제로 잘 지켜지지 않는 경우도 많다.

파이썬의 선 (The Zen of Python)

Beautiful is better than ugly. 아름다움이 추한 것보다 낫다.
Explicit is better than implicit. 명확함이 함축된 것보다 낫다.
Simple is better than complex. 단순함이 복잡한 것보다 낫다.
Complex is better than complicated. 복잡함이 난해한 것보다 낫다.
Flat is better than nested. 단조로움이 중접된 것보다 낫다.
Sparse is better than dense. 여유로움이 밀집된 것보다 낫다.
Readability counts. 가독성은 중요하다.

파이썬의 특징

1. 문법이 간결하고 쉽다.

기존 프로그래밍 언어를 익숙하게 사용하는 사람이라면 몇일 안에 기본문법을 다 배울 수 있다. 파이썬은 단락을 구분하는 기호({}, end)나 줄의 끝을 표현하는 기호(;)가 필요 없어서 간결하고 실수를 줄일 수 있다. 파이썬은 오직 들여쓰기만으로 단락을 구분한다.

if a == 1:
    print(1)
for a in range(10):
    print(a)

2. 인간의 언어와 비슷하다.

기존 언어에서 기호로 표현했던 operator들을 단어로 대체하여 파이썬 문법을 모르는 사람도 문장을 읽듯이 해석이 가능하다. 파이썬을 ‘실행가능한 의사코드 (executable pseudo code)’라고 부르는 이유다.

mylist = ['abc', 'bc', 'cde']
# if 'abc' is in mylist
if 'abc' in mylist:
    print("abc is in mylist")
# iterate values in mylist as v
for v in mylist:
    # if v starts with 'a' and length of v is > 1
    if v.startswith('a') and len(v) > 1:
        print(v)

3. 인터프리터 언어다.

C/C++ 은 실행파일을 생성하기 위해 빌드(build)를 해야한다. 빌드란 프로그래밍 언어를 기계어로 번역하는 컴파일(compile) 과정과 이를 실행파일로 만드는 과정(좁은 의미의 빌드)이 합쳐진 것이다. 이렇게 프로그램 전체를 컴파일 한 후 실행 가능한 언어를 컴파일 언어(compile language)라고 한다. C/C++, C#, Java 등이 이에 해당한다.
반대로 인터프리터 언어란 인터프리터(해석기)에 의해 소스코드 한 줄 한 줄을 즉시 실행할 수 있는 언어다. 컴파일 언어는 독립적으로 실행 가능한 실행 파일을 만들지만 인터프리터 언어는 인터프리터가 설치되어야 실행 가능하다. 대신 인터프리터만 있다면 컴파일 과정 없이 바로 실행 가능하기 때문에 한 줄씩 짜면서 편리하게 결과를 확인할 수 있다. Python, MATLAB, JavaScript, ruby 등 대부분의 스크립트 언어가 이에 해당한다.
인터프리터 언어는 대부분 플랫폼 독립적이다. 인터프리터가 설치될 수만 있다면 운영체제(Windows, Linux, MacOS)에 상관 없이 같은 코드로 동일한 동작을 할 수 있다. (C++도 Qt를 사용하면 플랫폼 독립적으로 사용가능하나 C++ 자체의 기능이 아닌 Qt 라이브러리의 도움이 필요하다.) 파이썬은 현재 Windows, Linux, MacOS 등 주로 PC용 운영체제를 지원하며 Android는 공식적으로 지원하고 있지 않다.

4. 동적 타입을 지원한다.

파이썬은 변수에 타입을 지정하지 않는다. 데이터 타입이 있긴 있으나 각 변수는 언제든 자신의 타입을 바꿀 수 있다. 이것은 프로그램에 대단히 높은 자유도를 주지만 대신 프로그램의 오류를 찾기 힘들게도 한다. 정적 타입은 꼭 필요한 메모리만 사용하고 속도도 빠르지만 타입명을 쓰는게 귀찮고 타입에 의한 구현상 제약이 많다. 동적 타입은 메모리도 더 쓰고 속도도 느리지만 코드가 간결해지고 구현상 더 다양한 시도를 할 수 있다.
(정적 타입 언어도 클래스를 잘 쓰면 동적 타입처럼 사용 가능은 하지만 더 많은 노오력이 필요하다. 어차피 파이썬 인터프리터도 C 언어 기반으로 만들어졌다.)

# 일단 변수 선언에 타입명이 들어가지 않는다.
a = "hello"
print("type:", type(a), "value:", a)
# -> type: <class 'str'> value: hello

# 나중에 다른 타입을 넣어도 된다.
a = 1234
print("type:", type(a), "value:", a)
# -> type: <class 'int'> value: 1234

# 함수에서 인자를 받을 때도 타입명을 쓰지 않는다.
def square(a)
    return a*a

5. 오픈 소스(open-source)다.

(모든 오픈 소스가 무료는 아니지만) 파이썬은 무료 (공짜, free)다. 파이썬의 장점은 간결하고 쉬운 언어 자체의 특성도 있지만 오픈 소스의 특성상 사용자가 많아질수록 사용가능한 라이브러리(파이썬에서는 패키지 package라고 부른다.)가 풍부해지고 그럴수록 사용자가 더 많아지고 라이브러리는 더 풍부해지는 선순환이 정착되어 있다.
게다가 이 과정을 극도로 편리하게 해주는 PyPI라는 저장소가 있다. 사용자 누구나 이곳에 자신이 만든 패키지를 업로드할 수 있고 남이 만든 패키도 pip install [package name] 이 한 줄의 명령어로 설치할 수 있다. 마치 안드로이드 앱을 플레이스토어에서 쉽게 받을 수 있는 것과 같다. 2019년 3월 2일 현재 170,382개의 프로젝트가 이곳에 올라와 있다. https://pypi.org/
이러한 시스템이 파이썬에만 있는 것은 아니지만 (비슷한 예로 Ruby의 gem이 있다. https://rubygems.org/) 이런 쉬운 공유와 배포로 인해 사용자가 많아지고 발전이 가속되어 모든 것을 할 수 있는 만능 언어가 되었고 특히 Machine Learning이나 데이터 분석 같은 분야에서는 독보적인 위치를 가지고 있다.

개인의견

저도 파이썬으로 여러가지 개발을 해보았는데 파이썬은 정말 구현도 쉽고 코드 읽기도 쉽고 자료도 풍부해서 이제는 파이썬을 주력 언어로 사용하고 있습니다. 꼭 데이터 분석이나 머신 러닝을 하지 않아도 간단한 콘솔 어플리케이션 개발에도 이만한 언어가 없습니다. C++로 오랫동안 연구개발을 한 다음 파이썬을 만났는데 쓰면 쓸수록 더 큰 매력에 빠지게 됩니다. C++과 비교해보면 파이썬은

  1. 컴파일을 안 해서 시간을 아낄 수 있고
  2. 타입을 안 써서 손이 편하고
  3. 라이브러리(패키지) 설치가 매우 쉽고
  4. 문법이 단순하고 (최신 C++17코드는 저도 못 읽어요)
  5. 내장된 데이터 자료형(list, dict)이 너무x100 좋고
  6. 개발자 스타일에 따라 코드가 크게 달라지지 않습니다. (띄어쓰기, 괄호 위치, 변수명 등)

반면에 단점을 꼽자면

  1. C++보다 메모리 사용이 크고 연산 속도도 느리다.
  2. 기본적으로 동시에 여러 처리를 동시에 할 수 있는 멀티 스레드(multi thread)를 지원하지 않는다.

단점이 있긴 있는데 이 단점을 커버할 수 있는 방법도 얼마든지 존재합니다. (좀 더 공부를 해야하지만…)

이제 여러분들도 이번 수업을 통해 파이썬의 매력을 느껴보시길 바랍니다.