Python

로고

파이썬(Python)은 귀도 반 로섬(Guido van Rossum)이 개발한 객체지향 스크립트 프로그래밍 언어이다.

개발 사유는 심심해서 만든 것으로, 구라 같지만 사실이라고 한다. 참고로 이거랑 비슷한 개발 사유를 지닌 물건이 리눅스다. 그러므로 컴돌이들은 적당하게 심심하게 해줄 필요가 있다고 본다.

1 특징[편집]

  • 인터프리터를 사용한 스크립트 언어
    컴파일 언어가 아닌 스크립트 언어로서 현재 다양한 운영체제에서 지원을 하고 있고 우분투 배포판에서는 2.7.x버전이 기본으로 포함되어 있다.
  • 객체지향 프로그래밍 언어
  • 동적 타입 사용
  • 대화형 콘솔 지원
    흔히 Read-eval-print loop이라고 부르는, 코드 한 줄 입력하면 바로 실행 결과를 알려 주는 식의 대화형 인터페이스를 기본적으로 지원한다. 파이썬을 처음으로 입문하는 데에 상당한 도움을 주는 기능.
  • 다양한 라이브러리 포함
    Batteries Included란 개념에 충실하여 네트워크 통신, XML 파서, GUI 툴킷, 정규 표현식 등 다양한 라이브러리를 표준 라이브러리 안에 포함하고 있다.
  • 들여쓰기를 통한 스코프 범위 구분
    C/C++을 비롯한 다른 언어의 경우 중괄호를 이용하여 스코프 범위를 구분하는데, 보통적으로 들여쓰기를 하여 스코프 범위를 명확히 알 수 있게 하지만,

프로그래머의 귀차니즘으로 들여쓰기를 안 할 수 있다. (물론 그 코드를 본 다른 프로그래머들은 멘붕을 할 것이지만 말이다.) 그러나 파이썬은 다른 프로그래밍 언어와 가장 차이나는 부분으로서 들여쓰기를 강제하고 있다. 정확히는 중괄호를 쓰지 않는 대신 스코프를 정확히 구분하는 것으로 이를 대신한다. 그래서 중괄호 위치 논쟁을 가지고 농담을 하다보면 '파이썬이라 상관없는데요?ㅎㅎ'라는 사람들이 심심치 않게 나온다.

2 3버전 VS 2버전[편집]

파이썬이 언어가 발전하면서 많은 부분에서 더 이상 사용되지 않지만 하위 호환성(옛 버전의 코드가 최신 버전의 프로그램에서도 동작하는 것)을 위하여 남겨져 찌꺼기가 쌓이게 되었다. 그러자 귀도 반 로섬은 이러한 하위 호환성을 포기하고 찌꺼기를 제거하면서 내부적으로 코드를 정리하게 되는데 이것이 파이썬 3.X버전이다. 이러한 파이썬 3.X버전은 2.X버전과의 하위호환성을 보장하지 않으며, 파이썬 2.X버전은 2.7버전에서 3.X버전에 새로 추가된 기능을 몇 가지 추가한 뒤 버그 수정만을 하고 있다.

대신 2to3을 제공하여 자동으로 파이썬 2.X버전 코드를 3.X버전으로 바꿔주는 기능을 제공하고 있다.

3 GIL 지옥[편집]

파이썬은 메모리 관리를 위하여 레퍼런스 카운트(Reference Count)기법을 이용하여 객체를 관리해 왔다. 이러한 레퍼런스 카운트의 동기화를 위하여 전역 인터프리터 록GIL(Global Interpreter Lock)을 사용하였다 초기 파이썬의 동작 환경은 멀티코어의 시대가 아니어서 이에 대한 문제가 없었으며(멀티코어여도 다수의 스레드는 쓰지 않았다), GIL은 구현하기 쉬웠으며 관리하기도 편했다.

하지만 환경이 변하여 멀티코어가 대중에게 보급되면서 다수의 스레드를 써야 하는 시대가 오자 GIL이 문제가 되었다. 다수의 스레드에서 객체에게 접근하려 할 시, GIL이 이를 막아 스레드가 동시에 실행되지 못하고 거기다 객체에 접근하기 위해 스레드끼리 싸움으로서 시간지연까지 생겨 한 개의 스레드를 사용했을 때보다 속도가 느리게 나왔다

이에 현재 파이썬 개발팀에서는 이에 대한 해결책으로 스레드가 아닌 자식 프로세스를 생성하여 GIL 문제를 우회하도록하고 있다.

4 구현체[편집]

4.1 CPython[편집]

파이썬의 창시자인 Guido van Rossum이 직접 만들었으며, 파이썬 언어에 대한 레퍼런스 구현. 인터프리터 구현이며, C로 작성되었기에 통상적으로 CPython이라고 부른다. 가장 안정적이고 모든 파이썬 버전의 구현체가 존재한다.

상술한 GIL 문제나 C 스택 문제는 엄밀히 말하면 레퍼런스 구현인 이 구현체의 구현 디테일 문제로, 대안 구현체들은 이 문제가 없는 경우도 있고, 아예 이 문제를 피하려고 새로운 구현체를 만든 경우도 있다. CPython이 스스로 이 문제를 해결하지 못하는 이유는 그렇게 하면 여기에 의존하던 파이썬 코드와 C 확장 모듈들이 와장창 깨져버리기 때문.

4.2 Jython[편집]

파이썬을 자바 바이트코드로 번역하여 자바 가상 머신(JVM)에서 실행하는 구현이다. JVM의 가비지 컬렉션 기능을 쓰기 때문에 GIL 문제를 겪지 않는다. 또한, Java 라이브러리를 직접 사용할 수 있고, Java 코드에서 Jython으로 컴파일한 파이썬 클래스를 사용하는 것도 가능하다.

다른 파이썬 구현 대비 속도가 많이 느리다는 단점이 있지만, 속도를 포기할 수 있다면, 파이썬의 높은 생산성으로 기존 자바 자원을 매우 손쉽게 조작할 수 있다는 장점을 제공한다. Jython 을 제작하는 인원들도 이 속도 때문에 고민이 많은 것 같지만 아직까지 뾰족한 해결책은 나오지 않은 것 같다.

현재(2015년 4월)까지 업데이트가 되고 있으며 파이썬 2.5버전과 2.7버전을 지원한다. 장기적으로는 Python 3 도 구현할 계획이 있다고 밝혔다. 안그래도 개발 속도가 엄청 느린데, 어느 세월에 Python 3 가 구현되는 걸 볼 수 있을까. 홈페이지

4.3 IronPython[편집]

파이썬을 .NET 플랫폼의 가상 머신인 .NET CLR에서 실행하는 구현이다. Jython과 같이 CPython에서 일어나는 GIL 문제가 없으며, .NET 라이브러리를 사용할 수 있다. 파이썬 2.7버전을 지원한다. 홈페이지

4.4 Stackless Python[편집]

CPython이 함수스택을 C언어의 것에 올려놓음으로써 오버플로우 문제가 일어나자 함수스택을 독자 구현하여 만들어진 구현체. 2.7버전과 3.X버전을 지원하는데, 이상하게 메인 페이지에 다운로드 페이지의 링크가 없다...

홈페이지 다운로드 페이지

4.5 PyPy[편집]

파이썬으로 만든 파이썬 구현이자, (현존하는 가장 빠른 파이썬 구현체인 것처럼 보이지만) 빠르기는 하지만 모든 상황에서 빠른것은 아니다. 자세한 내용은 항목 참조.

5 파이썬으로 작성된 자유/오픈소스 소프트웨어[편집]

6 파이썬을 내부적으로 사용하는 소프트웨어[편집]

  • 문명 IV
  • 블렌더(Blender)
  • 셰이드(Shade)
  • 오토데스크 마야 (3D 애니메이션 소프트웨어)
  • 월드 오브 탱크
  • 이브 온라인[1]
  • 잉크스케이프(Inkscape)
  • 페인트 샵 프로(Paint Shop Pro)
  • Abaqus (유한요소해석 소프트웨어)
  • Blender 3D (3D 애니메이션 소프트웨어)
  • BodyPaint 3D (3D 애니메이션 소프트웨어)
  • Cinema 4D (3D 애니메이션 소프트웨어)
  • MotionBuilder (3D 애니메이션 소프트웨어)
  • Rhino 3D CAD (3D 모델링 소프트웨어)
  • Sidefx Houdini (3D 애니메이션 소프트웨어)
  • Softimage (3D 애니메이션 소프트웨어)
  • softimage|xsi (3D 애니메이션 소프트웨어)
  • TORRENT (공유프로그램)
  • TRIBON (3D CAD 소프트웨어)

7 파이썬을 이용하고 있는 기업·정부 기관[편집]

8 추천 강좌/서적[편집]

  • 쉽게 배우는 프로그래밍 입문/파이썬 - 파이썬3 기반이다.
  • 점프 투 파이썬 - 많은 사람들이 추천하는 입문서. 무료로 볼 수도 있고, 돈을 내고 e-book을 받아서 볼 수도 있다.
  • A byte of Python - 적절한 서술이 돋보이는 무료 파이썬 교재. 링크는 한국어 번역본으로 어딘가에 pdf본도 떠돌아다닌다. 파이썬2 기반이다.
  • 열혈강의 파이썬 - 파이썬 2.x기반임을 제외하면 괜찮은 교재로 알려져있다. 다만 이 책의 파이썬3 반영판인 '파이썬3 바이블'의 경우 3버전의 내용을 반영하는 과정에서 설명 안한 문법을 미리 끌어다 쓰는 등 상태가 안좋아졌으니 구매하지 말자.
  • Python을 사용한 프로그래밍 소개 - MS에서 운영하는 Virtual Academy에 올라온 강좌의 한글판. 몇몇 오역과 더불어 좀 늘어지는 강의내용을 제외하면 괜찮은 영상강의다. 이런저런 프로그래밍 팁도 알려주는 등 초심자가 보기에도 적당하다.
  • 나만의 Python Game 만들기 - 정말 입문자를 위해 쓰여진 책 중 하나. 간단한 게임을 만들어 보면서 Python을 공부할 수 있다. 자잘한 부분도 상당히 꼭꼭 씹어서 알려준다. 영어가 된다면 인터넷으로 봐도 된다. 링크. 파이썬3 기반.

9 기타[편집]

  • 페리아 연대기에서는 Python을 고대언어로 부르고 있다. (그리스 신화에서 유래되었다고 하면 그럴 싸 하다.)

10 바깥 고리[편집]

11 각주

  1. stackless python 을 사용중이다.