Python

파이썬(Python)이란 무엇인가? What is Python?

yunjuniverse 2022. 6. 7. 07:42

print("Hello, world")

 

현재 세상을 가장 빠르게 지배해 나가고 있는 프로그래밍 언어는 무엇일까요?

 

바로 세상을 먹어 삼키는 뱀 같은 프로그래밍 언어

 

 

 

파이썬(Python)입니다. 파이썬의 위엄을 정리해보자면

 

1. 구글의 3대 개발 언어 중 하나 (C++, JAVA, Python)

2. 빅데이터 분석, 머신러닝, 인공지능 분야의 가장 주요한 언어

3. 높은 범용성과 낮은 난이도로 사용자가 많아, 매우 거대한 생태계 보유

4. 수많은 분야의 목적 프로그램을 만들 수 있는 범용성 보유

 

한마디로 배워두면 먹고 살기에 편하고 배우기 쉽고 원하는 분야에 자유롭게 쓸 수 있는 매우 좋은 프로그래밍 언어라는 뜻입니다. 이 높은 범용성과 생산성은 실제 취업시장에도 매우 큰 수요를 창출했습니다.

 

 

 

위 표를 보면 알겠지만 실제 업계에서 가장 필요로 하는 언어로 파이썬이 꼽혔습니다. 파이썬은 후술할 범용 언어로서의 특징 때문에 금융, 회계, 기획 분야에서도 점점 필수 능력으로 꼽히며 수요를 확장하고 있습니다.

 

이제는 프로그래머 뿐만 아니라 일반 분야의 사무 직업 군에서도 널리쓰이고 있는 파이썬이 어떤 특징 때문에 이렇게 지배적인 언어가 될 수 있었는지 알아봅시다.

 

01. WHAT is python?: 파이썬은 무엇인가?

 

파이썬을 프로필로 구성하면 다음과 같습니다. 파이썬은 실행할 수 있는 의사코드 대단한 별명을 지닐 정도로 쉬운 문법을 가진 언어입니다. 거의 영어의 논리구조와 비슷한 수준이죠. 참고로 의사코드(pseudocode)란 프로그래머들이 프로그래밍 언어로 코드를 짜기전 논리 구조를 자신이 편한 모국어로 정리한 코드의 내용을 말합니다. 이는 파이썬의 코드 구조가 마치 모국어와 같다는 이야기입니다.

 

파이썬이 가지고 있는 가장 중요한 특징 3가지를 정리해보겠습니다.

 

1) 파이썬은 인터프리터(Interpreter) 방식의 언어이다.

 

파이썬은 인터프리터 방식을 채용한 언어입니다. 따라서 코드를 한 줄씩 읽어나가며 프로그램을 실행합니다.

 

일단 인터프리터 방식은 프로그래밍 언어 설계가 쉽다는 장점이  있습니다. 파이썬이 귀도 반 로섬이라는 네덜란드의 프로그래머 분이 크리스마스 시즌에 토이 프로젝트로 혼자 만들었던 언어임을 생각하면 왜 파이썬이 인터프리터 방식으로 개발되었는지 이해하실 수 있을겁니다.

 

당연하게도 파이썬은 간단한 프로그램 수정, 동적인 기능 지원과 같은 인터프리터 방식 언어의 장점을 보유하고 있습니다. 그리고 인터프리터 언어의 특성 상 소스코드가 쉽게 공개가 되는 단점(?)도 보유하고 있습니다. 다만 이런 장단점이 모여 파이썬이 오픈소스 생태계가 매우 폭발적으로 증가했으며, 빠른 아이디어 실행이 필요한 연구소 등에서 자주 쓰이게 되었습니다. 인공지능, 빅데이터와 같은 연구분야들이 대부분 파이썬을 기반으로 발달한 이유가 바로 이것입니다.

 

다만, 인터프리터 방식은 컴파일 방식에 비해 느리다는 단점이 있죠. 하지만 파이썬은 접착언어(Glue language)로서의 특징을 가지고 있습니다. 접착언어는 다른 언어와 결합할 수 있는 특징이 있다는 것인데요, 특히 파이썬은 C와 함께 자주 쓰여 파이썬의 패키지나 라이브러리 중 속도가 필요한 곳은 빠른 실행속도의 최강자인 C로 만들어진 경우가 많습니다.

 

2) 파이썬의 디자인 패턴은 pythonic 해야 합니다.

파이썬은 총 19가지의 철학을 가지고 있습니다. 그 중 가장 특징적인 철학은

 

명확한, 그리고 가급적이면 유일한 하나의 방법은 항상 존재한다.
There should be one-- and preferably only one --obvious way to do it.

 

바로 13번 철학입니다. 파이썬은 문제에 대해 명시적이고, 아름답고, 읽기 쉬운 하나의 코드가 존재한다는 것을 전제로 합니다. 이 기준에 부합하는 디자인 패턴을 파이썬에서는 pythonic하다고 이야기합니다. 팩토리얼 함수를 파이썬으로 구현한 코드를 한번 보겠습니다.

 

def factorial(x):
    return 1 if x == 0 else x * factorial(x - 1)

 

단 두 줄로 팩토리얼을 구현한 함수가 만들어졌습니다. 이렇게 읽기 쉽고 간결한 디자인을 pythonic하다고 할 수 있습니다. 이 패턴은 다른 언어와 파이썬을 구분하는 가장 큰 특징입니다. 다른 언어들은 언어에 익숙해질수록 자신들의 스타일에 맞는 패턴을 발굴하는 반면 파이썬은 언어에 익숙해질수록 코드가 비슷해집니다. 이러한 특징이 코드에 대한 피드백이 활발해지는 것에 매우 큰 영향을 끼쳤고 이런 피드백은 좋은 교보재 역할을 해 학습 난이도 하락으로 이끄는 선순환 구조를 만들었습니다.

 

앞으로 파이썬을 능숙하게 다루기 위해서는 이런 철학에 익숙해져야 합니다.  파이썬의 19개 철학은 다음과 같습니다.

 
아름다운 것이 추한 것보다 낫다. (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.)
특별한 경우들은 규칙을 어길 정도로 특별하지 않다. (Special cases aren't special enough to break the rules.)
허나 실용성은 순수성을 이긴다. (Although practicality beats purity.)
오류는 절대로 조용히 지나가지 않는다. (Errors should never pass silently.)
명시적으로 오류를 감추려는 의도가 아니라면. (Unless explicitly silenced.)
모호함을 대할 때, 이를 추측하려는 유혹을 거부하라. (In the face of ambiguity, refuse the temptation to guess.)
명확한, 그리고 가급적이면 유일한 하나의 방법은 항상 존재한다. (There should be one-- and preferably only one --obvious way to do it.)
비록 그 방법이 처음에는 명확해 보이지 않을지라도(Although that way may not be obvious at first unless you're Dutch.)
지금 행동에 옮기는 것이 아예 안 하는 것보다는 낫다. (Now is better than never.)
비록 아예 안 하는 것이 지금 *당장* 하는 것보다 나을 때도 많지만. (Although never is often better than *right* now.)
구현 결과를 설명하기 쉽지 않다면, 그것은 나쁜 아이디어이다. (If the implementation is hard to explain, it's a bad idea.)
구현 결과를 설명하기 쉽다면, 그것은 좋은 아이디어일지도 모른다. (If the implementation is easy to explain, it may be a good idea.)
네임스페이스를 사용하는 것은 완전 좋은 생각이다! (Namespaces are one honking great idea -- let's do more of those!)

 

3) 파이썬은 범용 언어(general-purpose language)입니다. 

파이썬은 통계학을 위한 R이나 미디어아트를 위한 Processing과 같은 특정 분야를 위한 언어가 아닙니다.

 

또한 세상엔 많은 범용 언어가 존재하지만 그 언어가 쓰이는 분야는 확연이 달라집니다. 예를 들어, 자바는 웹 서버 개발, C++은 게임 또는 OS개발, 자바스크립트는 웹 프론트엔드 개발로 일반적으로 나누어집니다. 물론 앞서 예시로 프로그래밍 언어들 또한 목적 프로그램의 분야를 가리지 않고 '사용하려면 할 수 있습니다'. 하지만 제약이 상당합니다. 언어의 구조 자체가 분야에 맞지 않는 경우도 있고, 사용 이점이 적어 해당 분야를 위한 레퍼런스가 잘 만들어지지 않는 경우도 많아 새로운 분야의 목적 프로그램 제작에 어려움을 겪는 경우도 상당수죠. 

 

과학 분야에서 쓰이는 파이썬의 생태계만 해도 이정도....

 

그런 의미에서 파이썬은 범용 언어(general-purpose language)라는 표현에 가장 가까운 언어라고 할 수 있습니다. 앞서 설명했듯 낮은 학습 난이도, 많은 사용자 수, 많은 피드백이 가져다 준 파이썬의 생태계는 매우 풍요롭습니다. 

 

AI-머신러닝, 빅데이터 분석, 데이터 시각화 분야에 있어서는 타의 추종을 불허하는 주요 언어로 자리매김했을 뿐만 아니라, 범용 프로그램 개발, 웹 서버 개발, 게임 개발, 웹 데이터 수집(크롤링), 업무 자동화 등등 다양한 분야에 쓰이고 있습니다.

 

물론 최근 가장 각광받는 모바일 어플리케이션 개발에는 취약한 단점도 있지만, 최근에는 프론트엔드 웹개발 영역에서 자바스크립트를 대체하고자하는 py-script까지 등장해 정말 범용 언어로서 끊임없이 확장해나가고 있습니다. 

 

파이썬에게 한계는 없나봅니다.

 

 

결론적으로 파이썬은 인터프리터 기반의 언어로서

 

1. 배우기 쉽고(easy to learn),

2. 읽기 쉬우며(readability)

3. 다른 언어와 결합하기 쉽고(glue language)

4. 다재다능하며 (versatility, general-purpose language)

5. 수많은 피드백이 오고가는 거대한 학습자 커뮤니티가 존재하면서 (thriving community)

6. 실용적인(practical)

 

언어입니다. 파이썬에 대해 말하려면 아직 너무 할 이야기가 많지만 실제 언어를 배우기 전 알아보아야 할 지식은 이정도로 정리해보면 좋을 듯 합니다.

 

파이썬이 최고다!