본문 바로가기
Study/Python

01. 파이썬(Python)이란?

by 꼬부기가우는소리 2016. 9. 4.
728x90


참고 사이트 : 

[점프 투 파이썬] 01-1 파이썬 시작하기

- [점프 투 파이썬] 01-2 파이썬의 특징

- [점프 투 파이썬] 01-3 파이썬으로 무엇을 할 수 있을까?


이미지 참고 사이트 :

http://www.keepcalm-o-matic.co.uk/p/life-is-short-you-need-python/

- [LOG] Apple’dan iOS ve OS X uygulamaları için yeni bir programlama dili: Swift







1. 파이썬의 역사와 철학

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



파이썬의 핵심 철학은 ‘세상에는 문제를 해결하기 위한 가장 좋은 1가지 방법이 있다’이다. 실제로 파이썬 인터프리터에서 this 모듈을 import 하게 되면 실제로 파이썬의 철학이 출력된다. (import this) 아래의 파이썬의 철학이 곧 파이썬의 특징이다.







못생긴 것 보다 아름다운 것이 더 낫다.

함축적인 것 보다 분명한 것이 더 낫다. (복합 연산자가 존재하지 않는다.)

복잡한 것 보다 간단한 것이 더 낫다.

중첩된 것 보다 일렬로 있는게 더 낫다.

빡빡한 것 보다 널널한게 더 낫다. (들여쓰기로 코드를 나눈다.)

가독성이 중요하다.

특별한 경우가 많을 수록 정해진 규칙을 깨기 쉽다.

실용적인 것이 원론보다 더 낫다.

오류는 결코 어디서 발생했는지 나타나야 합니다.

경우에 따라서 분명하게 오류 발생을 억제시킬 수 있다. 

프로그램에서 모호성이 발견된다면 코드를 상상하려하면 안된다.

어떤 코드를 작성하는데 있어 그 방법을 해결하는 (최상의) 방법은 한가지 방법으로 풀어야 한다.

일부러 문제를 복잡하게 풀 이유는 없다.

안하는 것보다 당장 하는 것이 낫다.

때로는 (지금) 당장 해야 하느니 안 하는 것이 나을 경우도 있기는 하다.

구현된 것을 설명하기에 너무 어렵게 했다면 좋은 구현이 아니다.

반대로 구현한 것을 쉽게 설명한다면 좋은 구현이다.

네임스페이스라는 것은 아주 훌륭한 아이디어이다.




파이썬은 다른 언어의 모듈들을 가져올 수 있다. 또한 파이썬 프로그램은 공동 작업과 유지 보수가 매우 쉽고 편하다.




2. 파이썬의 특징

(1) 파이썬은 인간다운 언어이다

파이썬은 사람이 생각하는 방식을 그대로 표현할 수 있는 언어이다. 따라서 프로그래머는 굳이 컴퓨터의 사고 체계에 맞추어서 프로그래밍을 하려고 애쓸 필요가 없다. 파이썬을 전혀 모르더라도 다음 문장은 충분히 이해할 수 있다.





이렇듯 파이썬은 프로그램을 모르더라도 직관적으로 그 뜻을 알 수 있게 했으며, 이로인해 프로그래밍의 접근성을 높였다. 또한 뜻을 아는 것뿐만이 아니라, 작성할 때도 편하게 글쓰듯 작성 하는 것이 특징이다.



(2) 파이썬은 강력하다

오픈 소스인 파이썬은 당연히 무료이다. 또한 프로그래머는 만들고자 하는 프로그램의 대부분을 파이썬으로 만들 수 있다. 물론 시스템 프로그래밍이나 하드웨어 제어와 같은 매우 복잡하고 반복 연산이 많은 프로그램은 파이썬과 어울리지 않는다. 하지만 파이썬은 이러한 약점을 극복할 수 있게끔 다른 언어로 만든 프로그램을 파이썬 프로그램에 포함시킬 수 있다.


파이썬은 각각의 실행 환경이나 프로그래밍 특징에 맞추어 다양한 버전이 나와있다.



Python 2, 3

가장 기본이 되는 파이썬이며 c로 작성되었기 때문에 CPython이라고 표기하기도 한다. 서로 호환이 되지는 않는다. (Why? Python은 기본적으로 C를 바탕으로 한 인터프리터이다. 따라서, 2버전에서는 취약점이 많았다. 이를 수정하다 보니 구조를 완전히 뜯어 고치게 되었다.) 하지만 사용하기 쉬운 모듈들은 2버전대에 많다. 장기적으로 본다면 3버전을 공부하는 것이 좋다.

Stackless Python

파이썬 프로그램의 함수 호출 스택(Call Stack)을 구현할 때 C의 호출 스택에 그대로 얹어가도록 구현되었다. 이때 C의 호출 스택을 꽉 채우는 순간 스택 오버플로우가 발생한다. 이러한 문제를 해결하기 위해 나온 버전이다.

PyPy

파이썬으로 직접 구현된 파이썬이다. 성능적인 이슈를 바꾸기 위해 작성되었다. 실제로 CPython 보다 성능이 좋다. 

Cython

파이썬의 속도를 높이기 위해 아예 C언어로 변환 컴파일 되는 방식이다. 

Brython

웹에서 자바 스크립트를 대신하기 위해 나온 파이썬이다.

Jython 

자바 기반의 파이썬. 자바 가상 머신(JVM)위에서 작동한다. 하지만 성능이 굉장히 많이 떨어져서 요즘엔 업데이트가 잘 되지 않는다. 

IronPython 

Microsoft의 .net Framework의 가상머신인 CLR상에서 구현되고 그 위에서 동작하는 파이썬이다. 




(3) 파이썬은 간결하다

아래는 파이썬의 간결성을 보여주는 대표적인 사례이다.





확연히 차이나는 코드 라인 수를 볼 수 있다.


귀도는 파이썬을 의도적으로 간결하게 만들었다. 만약 펄(Perl)과 같은 프로그래밍 언어가 100가지 방법으로 하나의 일을 처리할 수 있다면 파이썬은 가장 좋은 방법 1가지만 이용하는 것을 선호한다. 이 간결함의 철학은 파이썬 문법에도 그대로 적용되어 파이썬 프로그래밍을하는 사람들은 잘 정리되어 있는 소스 코드를 볼 수 있다. 다른 사람이 작업한 소스 코드도 한눈에 들어와 이해하기 쉽기 때문에 공동 작업과 유지 보수가 아주 쉽고 편하다.


다음은 파이썬 프로그램의 예제이다.



1
2
3
4
5
6
7
8
9
10
# simple.py
languages = ['python''perl''c''java']
 
for lang in languages:
    if lang in ['python''perl']:
        print("%6s need interpreter" % lang)
    elif lang in ['c''java']:
        print("%6s need compiler" % lang)
    else:
        print("should not reach here")
cs



이 예제는 프로그래밍 언어를 판별하여 그에 맞는 문장을 출력하는 파이썬 프로그램 예제이다. 다른 언어들에서 늘 보게 되는 단락을 구분하는 괄호({ }) 문자가 보이지 않는 것을 확인할 수 있다. 또한 줄을 참 잘 맞춘 코드라는 것도 알 수 있다. 파이썬 프로그램은 줄을 맞추지 않으면 실행이 되지 않는다. 코드를 예쁘게 작성하려고 줄을 맞추는 것이 아니라 실행이 되게 하려면 꼭 줄을 맞추어야 하는 것이다. 이렇듯 줄을 맞추어 코드를 작성하는 행위는 가독성에 크게 도움이 된다.



(4) 파이썬은 개발 속도가 빠르다

파이썬에는 반복 가능한 객체라는 기능이 있다. 또한 다양한 오픈소스 모듈들이 존재한다. 정확히 해당 모듈들의 구성을 이해하지 못하더라도, 간결하게 불러와서 사용할 수 있다. 이러한 모듈들은 importing 시키는 과정이 쉽다. 새로운 모듈을 다운로드 받는 건 ‘easy install’이나 ‘pip’를 사용하여 마치 운영체제의 패키지 관리자를 사용하듯 쉽게 모듈을 내려받고 설치하고 사용하고 관리할 수 있다. 즉, 하나의 셸처럼 사용이 가능하다.


이러한 빠른 개발 속도 때문에 많은 스타트업에서 사용하는 언어 중 하나이다. 대표적으로 ‘드롭박스’는 파이썬으로 개발되었다. 또한 EVE 온라인이라는 게임 역시 python의 성능 향상 버전인 Stackless Python으로 작성되었으며, 개발사인 CCP Games는 파이썬 재단의 정식 후원자이다. 또한 구글에서 개발자들이 사용하기로 한 3대 언어 중 한가지이다. (C/C++, 자바, 파이썬) 기타 인스타그램, 유튜브, 레딧 등도 파이썬을 쓰고 있다고 알려져있다.


아래는 파이썬의 엄청나게 빠른 개발 속도를 두고 유행처럼 퍼진 말이다.


 "Life is too short, You need python." (인생은 너무 짧으니 파이썬이 필요해.)




3. 파이썬의 단점
(1) 구버전 보안 이슈
파이썬의 대표적인 I/O 함수인 input() 함수의 경우 사용자가 마음대로 추가로 코드를 짜거나, OS에 명령을 내릴 수 있는 치명적인 이슈가 있다. 아래와 같이 명령어 자체를 받아서 실행이 가능하다.




물론 raw_input을 사용하여 해결할 수 있다.


(2) 성능 이슈




파이썬은 성능이 중요할 때 고려할 언어는 아니다. 하지만 파이썬은 접합성이 좋은 언어이기 때문에 성능이 필요한 곳에는 C로 코딩을 하거나 기타 성능이 좋은 언어로 코딩하고, 나머지는 파이썬이 처리하면 된다. 다시 말해 파이썬으로 뼈대를 잡고 적재 적소에 다른 언어들을 사용해서 최적화 시킬 수 있다는 것이다.


(3) Multi Threading 이슈
파이썬에서는 병렬 처리가 필요할 때 GIL(Global Interpreter Lock)을 사용하게 된다. 이는 파이썬 진영에서 자체 개발된 lock 방식인데 이는 흔히 locking 방식의 2가지 방식중 coarse-grained-lock(디스크 전체 점유) 방식의 극단을 추구한 것이다. 이는 단일 쓰레드 일대 빠르기 때문에 이런 방식을 채택했다. (물론 다른 이유도 있음) 따라서 진짜 멀티쓰레드라고 부르기엔 어려움이 있다. 

이러한 문제 해결을 위해 파이썬은 다중 프로세스 방식으로 병렬 처리를 한다. multiprocessing이라는 모듈을 제공하는데 다중 코어 사용을 용이하게 해준다. 최근 3버전 에서는 코루틴 개념 (프로그램끼리 종속관계가 아닌 대등한 관계로서 서로를 호출하고, 호출 위치로 돌아가서 실행 재개, 순차적으로 서로를 호출)을 도입함으로서 멀티플랙싱을 싱글쓰레드로 구현하게 되었다.



4. 파이썬으로 할 수 있는/업는 일
파이썬으로 할 수 있는 일은 아주 많다. 대부분의 프로그래밍 언어가 하는 일을 파이썬은 쉽고 깔끔하게 처리한다. 

- 시스템 유틸리티 제작
- GUI 프로그래밍
- C/C++와의 결합
- 웹 프로그래밍
- 수치 연산 프로그래밍
- 데이터베이스 프로그래밍
- 데이터 분석 및 사물 인터넷

이 외에도 다양한 일을 수행할 수 있다.

하지만 아래의 두 가지는 파이썬으로 할 수 없다.

- 시스템과 밀접한 프로래밍 영역
파이썬으로 도스나 리눅스 같은 운영체제, 엄청난 횟수의 반복과 연산을 필요로 하는 프로그램 또는 데이터 압축 알고리즘 개발 프로그램 등을 만드는 것은 어렵다. 즉, 대단히 빠른 속도를 요구하거나 하드웨어를 직접 건드려야 하는 프로그램에는 어울리지 않는다.

- 모바일 프로그래밍
파이썬은 구글이 가장 많이 애용하는 언어이지만 파이썬으로 안드로이드 앱(App)을 개발하는 것은 아직 어렵다. 안드로이드에서 파이썬으로 만든 프로그램들이 실행되도록 지원하긴 하지만 이것만으로 앱을 만들기에는 아직 역부족이다. 아이폰 앱을 개발하는 것 역시 파이썬으로는 할 수 없다.



5. 파이썬 설치
파이썬 설치는 아래의 링크를 따라가면 상세히 설명되어 있다.




댓글