파이썬

내위키
Dennis (토론 | 기여)님의 2020년 3월 7일 (토) 06:06 판 (→‎언어의 구조)

네덜란드 출신 프로그래머인 귀도 판 로섬이 만들어 낸 프로그래밍 언어. 1989년 크리스마스 때 연구실은 문이 닫혀 있고, 뭔가 몰두할 만한 "취미" 프로그래밍 프로젝트가 있었으면 해서 시작한 게 파이썬이 되었다고 한다. 심심해서 만들었는데 세상을 뒤흔들었다는 말을 우리는 믿어야 한다. 하긴 뭐 리눅스도 시작은 재미로 한 거라... 리눅스리누스 토르발스처럼 귀도 판 로섬 역시 파이썬의 '자비로운 종신 독재자'였지만 2018년 7월, 이 자리를 내놓겠다고 밝혔다.[1][2] 뭐 하나 바꾸려면 하도 지랄하는 인간들이 많아서 짜증나서라고... 후임은 임명하지 않을 것이며 앞으로는 집단 결정이 될 것이라고 말했다. 다만 "파이썬을 떠나지 않고, 평범한 핵심 개발자로서 계속 멘토링을 할 것"이라고 밝혔다.

역사는 길지 않은 편이지만 쉬운 사용법과 모듈을 이용한 강력한 확장성으로 큰 인기를 끌고 있으며, 특히 각자의 필요에 맞는 간단한 프로그램을 빠르게 만들기에 좋은 도구다. 실제 미국 대학에서는 학과에 관계 없이 파이썬을 배우는 사람들이 많다. 자료 정리나 간단한 통계 처리를 비롯해서 이공계가 아니더라도 데이터를 다룰 일들은 많은데, 파이썬을 쓸 줄 알면 상당한 도움이 된다. 수많은 파이썬 모듈이 나와 있어서 모듈만 잘 갖다 붙여도 별의 별 걸, 그것도 무척 쉽게 할 수 있다. 파이썬에서는 모듈을 관리하고 다운로드, 설치, 삭제할 수 있는 pip이라는 도구를 제공하고 있다. 큼직한 프로그램이나 엔터프라이즈급 서비스도 가능하며, 구글에서도 공식 프로그래밍 언어 중 하나로 쓰이고 있고 파이썬을 이용한 웹 서비스도 상당한 세를 형성하고 있다. 다만 프로그랭 실행이 인터프리터 방식이다 보니 GUI 환경의 데스크톱 프로그램이나 모바일 앱 개발 쪽으로는 아직 큰 인기는 끌지 못하고 있다.

파이썬이라는 이름은 귀도 판 로썸이 좋아하는 영국의 코미디 팀인 몬티 파이선(Monty Python)에서 따온 것이다. 그래서인지 파이썬을 다룬 책이나 문서에는 변수나 함수 이름으로 egg, spam, bacon 같은 이름이 많이 나온다. 왜 그런지는 스팸 (광고) 문서 참조.

우리나라에서는 웹 서버 사이드 프로그래밍 쪽으로는 인기가 그리 높지 않지만 해외에서는 상당히 많이 쓰이고 있다. 구글의 공식 언어 중 하나일 정도로 인정 받고 있으며 파이썬으로 돌리고 있는 웹 서비스들도 있고, 파이썬 장고 웹 프레임워크 기반으로 개발된 인스타그램은 가장 손꼽히는 활용 사례다. 드롭박스는 일단 귀도 판 로섬이 근무했던 곳이기도 해서 파이썬 활용도가 높은 것으로 알려져 있다. 그밖에도 링크드인, 핀터레스트와 같은 대규모 웹 서비스들이 파이썬을 주축으로 혹은 일부 사용하고 있어서 대형 서비스에서도 충분히 활용할 수 있다. 여러 가지 웹 프레임워크가 난립해 있는 다른 언어들과는 달리 파이썬은 장고 웹 프레임워크가 압도적으로 높은 사용률을 보이고 있고 좀 더 경량인 플라스크도 어느 정도 사용자를 확보하고 있다.

특징

기초 수준 영어에 친숙하다면 상당히 직관적이라는 것을 알 수 있다. 상당수 프로그래밍 언어들은 괄호나 중괄호를 비롯해서 이런저런 기호를 많이 쓰는 편인데 반해 파이썬은 자연어를 많이 활용하는 편이다. 예를 들어서 C++로 1부터 100까지 더한다고 가정해 보면,

int a = 0
for (int i = 0; i < 101; i++) {
  a += i;
}
count << a;

반면 파이썬은

a = 0
for x in range(0, 101):
  a += x
print(a)

프로그래밍 언어를 잘 모르는 사람에게 C++의 for 문은 정말 뭔지 알 수 없지만 파이썬은 어느 정도 추측이 가능하다. "x가 0부터 101에 이르는 범위(range) 안에 (in) 있는 동안"이라는 정도로 해석해 볼 수 있기 때문이다. 한국어로 해석해서 range와 in의 순서가 반대로 나와서 그렇지 영어에 친숙하다면 더욱 이해하기 쉽다. 이런 특징은 파이썬을 쉽게 배울 수 있는 이유 중 하나다.

언어의 구조

변수

파이썬은 약타입 언어로 변수는 C자바처럼 유형을 사전에 정의하고 엄격하게 지켜야 하는 방식이 아니다. 즉 자바스크립트베이직처럼 어떤 유형이든 변수에 대입할 수 있다. 변수를 정의 할 때에도단순히 변수의 이름을 정하고 초기값을 대입하는 것만으로도 충분하다. 다만 전역변수와 로컬변수 구분은 확실히 존재한다. 일단 값을 대입한 상태에서는 데이터 유형의 영향을 받기 때문에 문자열에 숫자를 더한다든가 하는 것은 안 되며[3] 반드시 타입 캐스트를 거쳐야 한다.

블록

코드의 실행 블록 범위를 정할 때 C자바를 비롯한 많은 언어들은 중괄호를 사용하거나, 파스칼처럼 endif와 같은 키워드를 사용해서 블록의 끝을 표시하는 것과는 달리 파이썬은 들여쓰기를 블록을 표시하는 방법으로 사용한다. 대부분 언어들은 들여쓰기를 시각적으로 블록을 구분하기 편하기 위해 쓰지만 파이썬은 의무이며 그렇지 않으면 오류를 일으킨다. 대신 중괄호나 endif를 사용하지 않으로 코드의 길이가 그만큼 줄어드는 장점이 있다.

들여쓰기를 할 때에는 탭을 사용하지 않도록 권장하며 보통 블록 1 단계 당 빈칸 2개 또는 4개를 사용하지만 파이썬의 코드 스타일 가이드라인인 PEP8에서는 빈칸 4개를 권장한다. 파이썬을 인식하는 코드 편집기는 이런 규칙을 알고 있기 때문에 탭을 눌러도 자동으로 스페이스로 전환해 준다. 블록을 이끄는 줄, 즉 루프 문이나 함수/클래스 정의문의 끝에는 쌍점(:)을 붙여서 블록이 시작한다는 것을 알린다. 파이썬을 인식하는 코드 편집기는 이러한 쌍점이 나온 다음 줄바꿈을 하면 자동으로 들여쓰기를 해 준다.

함수

함수의 정의는 자바스크립트와 같은 동적 타입 언어들과 별로 다르지 않다.

def add(x, y):
    return x + y

함수를 정의할 때에는 def 키워드를 사용하며 괄호 안에 매개변수의 목록을 써 주면 된다. 마지막으로 블록의 시작을 뜻하는 : 기호를 불여주고 함수의 내용은 들여쓰기를 해 준다.

파이썬의 특징 중 하나는 키워드 매개변수를 지원한다는 점이다. 함수를 호출할 때 매개변수는 나오는 순서에 따라서 지정되지만 키워드 매개변수를 사용하면 순서를 바꿀 수도 있다.

def divide(x, y):
    return x / y

z = divide(y=2, x=4)
print(z)

키워드 매개변수에는 몇 가지 제약이 있다. 함수를 호출할 때 매개변수는 순서 기준 매개변수가 우선이다. 키워드 매개변수는 순서 기준 매개변수가 다 나온 다음 나와야 한다. 또한 이미 순서 기준 매개변수로 나온 매개변수를 키워드 매개변수로 다시 지정할 수 없다. 예를 들어,

def divide(x, y):
    return x / y

z = divide(2, x=4)
print(z)

위 코드는 오류를 일으킨다. divide()를 호출할 때 첫 번째 매개변수인 2를 x로 간주하므로, x=4로 중복 지정할 수 없다.

개발 환경

파이썬을 설치하면 기본으로 제공하는 파이썬 쉘에 간단한 코드 정도는 직접 입력해서 실행시킬 수 있다. 개발환경인 IDLE[4]도 딸려오는데 간단한 편집기와 쉘, 간단한 디버거를 제공한다. 그리 복잡하지 않은 프로그램이라면 이걸로도 충분하고 일반 텍스트 편집기로 코드를 짜서 파이썬 쉘로 돌릴 수도 있다. 파이썬으로 만들었기 때문에 pip으로 설치할 수 있는 간편한 개발 환경인 Mu도 있다.

좀 더 좋은 기능을 원한다면 비주얼 스튜디오 코드와 같이 프로그래밍에 특화된 편집기도 있으며 플러그인 설치로 실향 및 디버그도 할 수 있다. 더 좋은 통합개발환경을 원하다면 제트브레인 사의 파이참(PyCharm)이 많이 쓰인다. 상용이지만 무료 비전인 커뮤니티 에디션만으로도 굉장히 좋은 편집 및 디버깅 기능을 마음껏 쓸 수 있다.

각주

  1. "파이썬 창시자 귀도 반 로섬, BDFL 사임", ZDNet Korea, 2018년 7월 13일.
  2. 그런데 '자비로운 종신 독재자'라는 타이틀이 처음 붙은 사람이 바로 귀도 판 로섬이다.
  3. 문자열에 숫자를 곱할 수는 있다. 숫자만큼 문자열을 반복한 문자열을 돌려준다.
  4. 통합개발환경을 뜻하는 Integreted DeveLopment Environment에서 중간에 L자 하나를 더 끄집어내서 만든 이름. 몬티 파이선의 멤버인 에릭 아이들(Eric Idle)에서 따왔다는 게 정설.