Difference between revisions of "파이썬"

Jump to navigation Jump to search
4,756 bytes removed ,  18:56, 15 April 2018
no edit summary
Line 2: Line 2:
<div style="float: right; margin-left: 12px">__TOC__</div>
<div style="float: right; margin-left: 12px">__TOC__</div>
= 개요 =
= 개요 =
[[파이썬]]([[Python]])은 [[프로그래밍 언어]]의 일종이다.
[[파이썬]]은 [[프로그래밍 언어]]의 일종이다.




[[Java]], [[C language]], [[C++]], [[Python]], [[C#]]이 전세계에서 가장 많이 쓰이는 다섯 개의 [[프로그래밍 언어]]이다.
[[자바]], [[C 언어]], [[C++]], [[Python]], [[C#]]이 전세계에서 가장 많이 쓰이는 다섯 개의 [[프로그래밍 언어]]이다.


[[C샾]]은 [[마이크로소프트]]에서 만들었고, 거의 [[Microsoft]]용으로만 쓰인다.  
[[C샾]]은 대부분 [[마이크로소프트]]용으로만 쓰이고, [[오브젝티브-C]]([[Objective-C]])는 거의 [[애플]]용으로만 쓰인다.


[[C 언어]]의 파생 언어 중 하나인 [[오브젝티브-C]]([[Objective-C]])도 거의 [[애플]]용으로만 쓰인다.


[[자바]], [[C 언어]], [[C플플]], 파이썬은 [[리눅스]], [[맥OS]], [[윈도우즈]], [[안드로이드]], [[아이OS]]([[iOS]]) 등 [[운영 체제]]를 가리지 않고 다양한 개발에 쓰인다.
[[안드로이드]] [[스마트폰]] 사용자의 경우 [[플레이 스토어]]([[Play Store]])에서 SoloLearn에서 만든 Learn Python같은 [[앱]]([[app]])을 설치하여 파이썬 프로그래밍을 배워도 좋다. 지금은 여러 잡다한 프로그래밍 학습 앱이 "SoloLearn: Learn to Code for Free" 하나로 합쳐져서 Learn Python 대신에 새로 나온 앱을 깔아야 한다.
 
 
[[안드로이드]]경우 [[플레이 스토어]]([[Play Store]])에서 SoloLearn에서 만든 Learn Python같은 [[앱]]([[app]])을 설치하여 파이썬 프로그래밍을 배워도 좋다. 지금은 여러 잡다한 프로그래밍 학습 앱이 "SoloLearn: Learn to Code for Free" 하나로 합쳐져서 Learn Python 대신에 새로 나온 앱을 깔아야 한다.




Line 75: Line 71:
파이썬이 동적 타입 언어(dynamically typed language)라는 점이 큰 프로젝트에서는 단점으로 작용하여 자료구조 설계나 디버깅이 어렵다는 지적도 있다. 다만 "정적 타입 언어 vs. 동적 타입 언어" 논쟁은 서로의 장단점이 있으며 일종의 종교논쟁 취급 받는다. 일례로 OCaml같은 강력한 타입 인터페이스(Hindly-Milner)를 가진 경우라 할지라도 타입 에러 정도는 거의 모두 컴파일 타임에 잡아내는 있는 반면에, 모든 버그가 타입 에러는 아니기 때문에 여전히 테스트 및 디버깅 과정은 필요하며, 타입 시스템으로 인한 부담 때문에 빠른 구현에는 부담이 갈 수 있다. 반면에 동적 언어는 빠른 구현의 이점이 있지만 타입 에러가 많이 나는 특징이 있다. 그러나 커버리지가 높은 테스트 세트로 어느정도 커버할 수 있으며 최근의 추세와 부합하는 방식이기도 하다.
파이썬이 동적 타입 언어(dynamically typed language)라는 점이 큰 프로젝트에서는 단점으로 작용하여 자료구조 설계나 디버깅이 어렵다는 지적도 있다. 다만 "정적 타입 언어 vs. 동적 타입 언어" 논쟁은 서로의 장단점이 있으며 일종의 종교논쟁 취급 받는다. 일례로 OCaml같은 강력한 타입 인터페이스(Hindly-Milner)를 가진 경우라 할지라도 타입 에러 정도는 거의 모두 컴파일 타임에 잡아내는 있는 반면에, 모든 버그가 타입 에러는 아니기 때문에 여전히 테스트 및 디버깅 과정은 필요하며, 타입 시스템으로 인한 부담 때문에 빠른 구현에는 부담이 갈 수 있다. 반면에 동적 언어는 빠른 구현의 이점이 있지만 타입 에러가 많이 나는 특징이 있다. 그러나 커버리지가 높은 테스트 세트로 어느정도 커버할 수 있으며 최근의 추세와 부합하는 방식이기도 하다.


== 높은 생산성 ==
http://xkcd.com/353/ 파이썬의 높은 생산성에 대한 만화 ~~뭐야 이거 2.x 버전이잖아~~
[[인터프리터]] 언어이면서 우수한 자료형과 다양한 모듈 등을 제공해 개발기간이 매우 단축되는 것이 특징. '[[C 언어]]로 2년동안 완성하지 못한 프로젝트를 파이썬으로 한달만에 해냈다'는 극적인 경험담이 있을 정도다. C언어와의 접착성도 좋기 때문에, 일단 Python으로 빨리 구현하고, 남은 시간에 속도에 병목이 되는 부분을 C로 전환하는 전략을 내세우고 있다. 버전이 올라가면서 Python 자체도 그리 느리지 않게 되었다. ~~맛들이면 다른 언어로 전환하기 힘든 부작용이 생긴다 카더라.~~
참고로 저 [[xkcd]] 만화는 파이썬에서 import antigravity라고 하면 나오는 [[이스터 에그]]이다.(...) http://www.youtube.com/watch?v=_V0V6Rk6Fp4
== 디자인 철학 ==
[[펄]]([[Perl]])의 프로그래밍 [[모토]]([[motto]])는 "프로그래밍하는 데는 한 가지 이상의 방법이 있다.([[There's more than one way to do it]]이고 [[TMTOWTDI]] 또는 [[TIMTOWTDI]]로 줄여서 얘기함. Tim Toady라고 발음함.)"이다. 반면, [[파이썬]]([[Python]])의 20번째 PEP(Python enhancement proposal, 파이썬 향상 제안)는 파이썬의 [[젠]]([[zen]], [[선종]] [[불교]]의 [[선]]([[교지]])을 얘기함.)인 [[The Zen of Python]]인데, 파이썬의 젠 중 하나는 "문제를 해결하는 데는 명백한 하나의 방법(그리고 선호되는 오로지 하나의 방법)만 있어야 한다. There should be one-- and preferably only one --obvious way to do it.이다. 이 젠을 펄의 모토와 대비시켜서 간략화한 것이 "문제를 해결하는 데는 오직 하나의 방법만 있다.([[There's only one way to do it]], 줄여서 [[TOOWTDI]])"이다. PEP 20의 저자는 Tim Peters이다.
[[Perl]]의 '하나 이상의 해결법이 존재한다' 와는 정반대로 '가장 아름다운 하나의 답이 존재한다'라는 명제를 모토로 하고 있다. 이 모토 하에 다음과 같은 [[철학]]([[zen]])을 지니게 되었다.
* 아름다운 것이 추한 것보다 낫다.(Beautiful is better than ugly)
* 명쾌한 것이 암시적인 것보다 낫다. (Explicit is better than implicit)
* 간결한 것이 복잡한 것보다 낫다. (Simple is better than complex)
따라서 다른 언어들의 코딩 스타일은 각자의 취향에 맞게 [[발산]] 진화 하는 반면, 파이썬은 위의 철학들을 만족시키는 하나의 스타일로 [[수렴]] 진화하는 성향이 있다. 실제로 [[C 언어]] 계열의 [[프로그래밍 언어]]에서 중괄호의 위치에 대한 논쟁은 거의 종교적 논쟁에 가깝다. 현재 한국에서 가장 많이 쓰이는 방식은 C 언어의 창시자 Kernighan과 Ritchie의 K&R 스타일이다. 그러나 Eric Allman의 방식을 고수하는 사람들도 제법 많다. 이외에도 중괄호 위치를 정하는 다른 방법들이 있으며 자세한 내용은 http://gyumee.egloos.com/1306012 에서 확인 가능. 이런 성향은 다른 언어에는 없는 파이썬스러움(pythonic)이라는 독특한 개념을 낳게 되었는데, 복잡하지 않으면서 의미가 명확하고, 심플한, 파이썬의 철학을 따르는 것들을 지칭하는 개념이다.
이런 철학 때문에 문법이 굉장히 엄격한 편이다. 예를 들자면, 다른 언어에서는 해도 되고 안 해도 되는 들여쓰기가 이 언어에서는 의무로 들여쓰기 자체로 하나의 코드 블럭이 된다. 코드 블럭을 명시적으로 표시하지 않아도 돼서 비쥬얼 적으로는 굉장히 깔끔한 반면, 자유도를 제약한다는 평도 있다. 특히 [[C 언어]] 코드를 종이에 출력해보면 중괄호 있고 없고의 가독성 차이가 의외로 크다.


== Python 3 ==
== Python 3 ==
Line 139: Line 116:


파이썬으로 무엇을 할 수 있을까? https://wikidocs.net/7
파이썬으로 무엇을 할 수 있을까? https://wikidocs.net/7


== 웹 프로그래밍 ==
== 웹 프로그래밍 ==
Line 1,582: Line 1,560:




=== 웹 프레임워크 ===
=== 웹 프레임워크 Django ===
일반적으로 파이썬을 웹 서비스에 쓴다고 하면 [[쟁고우]]([[Django]], [ˈdʒæŋɡoʊ])나 [[플래스크]]([[Flask]], [flӕsk])를 쓴다고 생각하면 된다. Django는 풀 스택 [[웹 프레임워크]]이고, Flask는 아니다.
일반적으로 파이썬을 웹 서비스에 쓴다고 하면 [[쟁고우]]([[Django]], [ˈdʒæŋɡoʊ])나 [[플래스크]]([[Flask]], [flӕsk])를 쓴다고 생각하면 된다. Django는 풀 스택 [[웹 프레임워크]]이고, Flask는 아니다.


파이썬과 비슷한 [[루비]]([[Ruby]])에서는 [[루비 온 레일즈]]([[Ruby on Rails]])[[시나트라]]([[Sinatra]])라는 [[웹 프레임워크]]([[web framework]])를 많이 쓴다.
[[쟁고우]]([[Django]])는 Python기반 [[웹 프레임워크]]([[web framework]]) 중에 가장 널리 퍼져있다. [[풀 스택]]([[full stack]]) [[웹 프레임워크]]([[web framework]])이다.
 
자세한 내용은 [[쟁고우]]([[Django]]) 문서 참조.




Line 1,598: Line 1,578:
[[운영 체제]]는 [[하드웨어]] 위의 [[커널]](kernel), 그리고 그 위의 [[셸]](shell), 그리고 그 위의 [[애플리케이션]]으로 구성된다. 그 중 커널은 모놀리식 커널(monolithic kernel)과 마이크로 커널(micro kernel)이 있는데, 한 덩어리로 되어서 많은 기능을 다 집어넣은 [[리눅스]]나 [[유닉스]]의 커널이 모놀리식 커널이며, [[미닉스]]([[Minix]]), [[마하]]([[Mach]]), GNU [[허드]]([[Hurd]]), [[심비안]]의 커널은 마이크로 커널, 그리고 그 둘을 섞은 하이브리드 커널(hybrid kernel)이 있다. 하이브리드 커널은 모놀리식 커널에 마이크로 커널을 포함시킨 것이다. 하이브리드 커널에는 [[윈도우즈]] NT 커널과 [[macOS]]와 [[iOS]]의 기반이 되는 [[다윈]]의 [[XNU]] 커널이 있다.
[[운영 체제]]는 [[하드웨어]] 위의 [[커널]](kernel), 그리고 그 위의 [[셸]](shell), 그리고 그 위의 [[애플리케이션]]으로 구성된다. 그 중 커널은 모놀리식 커널(monolithic kernel)과 마이크로 커널(micro kernel)이 있는데, 한 덩어리로 되어서 많은 기능을 다 집어넣은 [[리눅스]]나 [[유닉스]]의 커널이 모놀리식 커널이며, [[미닉스]]([[Minix]]), [[마하]]([[Mach]]), GNU [[허드]]([[Hurd]]), [[심비안]]의 커널은 마이크로 커널, 그리고 그 둘을 섞은 하이브리드 커널(hybrid kernel)이 있다. 하이브리드 커널은 모놀리식 커널에 마이크로 커널을 포함시킨 것이다. 하이브리드 커널에는 [[윈도우즈]] NT 커널과 [[macOS]]와 [[iOS]]의 기반이 되는 [[다윈]]의 [[XNU]] 커널이 있다.


==== Django ====
[[쟁고우]]([[Django]])는 Python기반 [[웹 프레임워크]]([[web framework]]) 중에 가장 널리 퍼져있다. [[풀 스택]]([[full stack]]) [[웹 프레임워크]]([[web framework]])이다.
자세한 내용은 [[쟁고우]]([[Django]]) 문서 참조.
==== Flask ====
[[플래스크]]([[Flask]])는 Django와 함께 파이썬에서 많이 쓰이는 [[웹 프레임워크]]이다. Django와는 달리 논 풀 스택 웹 프레임워크(non full stack web framework)이다. 즉, 최소한의 기능만 있어서 가볍고 빠르다. 그리고 필요한 기능이 있으면 추가해서 사용한다.


=== 파이게임(Pygame) ===
=== 파이게임(Pygame) ===
33

edits

Navigation menu