파이썬의 정의
파이썬은 도대체 무엇이길래 이렇게 인기가 많은 걸까?
코딩을 모르더라도, 파이썬에 대해서는 들어보셨을 겁니다. 마치 리그오브레전드라는 게임은 모르지만, 라디오 스타와 같은 매체를 통해 페이커를 알게 된 사람이 있는 것처럼요.
한 매체에 따르면 미국 대학생들에게 프로그래밍 및 컴퓨터 공학 입문용으로 가장 널리 활용되고 있는 언어가 C와 자바가 아닌 파이썬이라고 합니다. 미국까지 갈 필요 없이, 한국에서만 해도 길을 지나다 보면 파이썬 학원에서 나오는 초등학생들을 심심치 않게 보실 수 있습니다. 이처럼 이미 파이썬은 현대 사회를 이끄는 하나의 트렌드이며 영어처럼 배워야 하는 제3의 언어로 자리 잡고 있는 것으로 보입니다.
파이썬이 인기가 있는 이유는 다른 프로그래밍 언어에 비해 사람이 이해하기 쉬운 직관적 언어이고 활용할 수 있는 범위가 굉장히 넓기 때문입니다. 실제로 파이썬은 데이터 분석과 업무 자동화(RPA)부터 인공지능(AI) 분야까지, 활용되지 않는 곳을 찾기 어려울 정도로 산업 전방위적으로 활용되고 있습니다.
물론 다른 언어에 비해 쉬울 뿐, 파이썬도 코딩이기 때문에 최소한의 진입 장벽이 있는 편입니다. 관심과 집중할 수 있는 시간이 있다면 이 장벽을 넘기는 쉽겠지만, 대학생이나 직장인들에게는 그럴 시간이 부족합니다. 파이썬에 대해 공부할수록, 모르는 지식이 나오고 그 지식을 찾기 위해 계속 시간을 투자해야 하니까요.
이 글은 바쁘지만, 배우고 싶은 분들을 위해 파이썬에 대한 정의와 그 정의에서 파생된 개념을 하나의 글로 정리한 글입니다. 그럼 저와 함께 파이썬을 알아보러 가볼까요.
파이썬의 정의와 유래
파이썬(Python)은 1991년, 네덜란드계 소프트웨어 엔지니어인 귀도 반 로섬이 발표한 고급 프로그래밍 언어입니다. 파이썬이라는 이름의 유래는 귀도 반 로섬이 좋아하는 코미디언에서 따온 것입니다. 파이썬의 로고는 두 마리의 뱀이 얽혀 있는 것을 표현했다고 하네요. 파이썬은 다양한 언어를 바탕으로 제작되지만, 현재는 C언어 베이스가 가장 널리 활용되고 있습니다.
파이썬에서 중요한 특징은 다음과 같습니다.
첫 번째, 고급 프로그래밍 언어이며 인터프리터식 대화형 언어입니다.
두 번째, 플랫폼에 독립적이며 객체 지향적 언어입니다.
세 번째, 동적 타이핑 언어이며 가독성이 뛰어납니다.
네 번째, 활용할 수 있는 라이브러리가 풍부합니다.
이 특징들의 개념을 모두 이해한다면 파이썬이 왜 인기가 있는지 알 수 있습니다. 그럼 이제 이 특징들에 대해 하나씩 살펴보도록 하겠습니다.
파이썬의 특징
파이썬은 코드의 유지보수가 편리합니다.
첫 번째 특징: 파이썬은 인터프리터식 고급 프로그래밍 언어
고급 프로그래밍 언어는 하이 레벨 프로그래밍 언어라고도 불리며, 사람이 이해하기 쉽게 작성된 프로그래밍 언어를 의미합니다. 파이썬을 비롯해 C, 자바 등 대부분의 언어가 이에 해당합니다.
반대로 저급 프로그래밍 언어는 어셈블리어로 기계, 컴퓨터 세계의 언어입니다. 어셈블리어는 기계어와 일대일로 대응이 됩니다. 그들과 대화하고 소통하기 위해서는 이 언어를 사용해야 합니다. 하지만 새로운 아키텍처의 CPU가 나올 때마다 매번 언어가 바뀌기 때문에 사람이 이를 활용하기는 매우 어렵습니다.
컴퓨터는 굉장히 유용한 도구입니다. 따라서 우리는 반드시 컴퓨터와 소통해야 합니다. 여기서 통역에 대한 수요가 등장합니다. 외국인과 소통하기 위해서 통역사가 필요하듯, 난해한 컴퓨터 세계의 언어를 번역해 줄 통역사가 필요합니다.
이 통역사에는 두 종류가 있는데 하나는 컴파일러, 다른 하나는 인터프리터입니다. 컴파일러와 인터프리터 모두 사람이 작성한 고급 프로그래밍 언어를 기계어인 저급 프로그래밍 언어로 번역해 주는 역할을 하지만, 그 방식에는 차이가 있습니다.
컴파일러는 사람의 말을 다 듣고 난 다음, 기계 세상의 언어로 번역합니다. 고급 프로그래밍 언어를 실행하면, 처음부터 끝까지 코드를 기계어로 번역한 다음 기계에게 전달하여 코드를 실행하는 방식입니다. 즉, 번역과 실행이 따로 분리되어 있는 구조입니다.
이러한 방식은 실행 속도 측면에서 장점이 있습니다. 고급 언어를 처음부터 끝까지 기계어로 번역하고 컴퓨터에 전달하기 때문에 처음 실행에는 시간이 걸리지만, 일단 한번 코드가 실행되었다면 기존에 번역한 내용을 그대로 기계에게 전달할 수 있기 때문에 처리 속도가 굉장히 빠릅니다.
그러나 장점만 있는 것은 아닙니다. 코드를 수정하는 디버깅 측면에서는 단점이 있습니다. 만약 코드에 에러가 있다면 이를 수정하고 수정된 코드를 다시 실행해야 합니다. 이때, 모든 코드를 처음부터 끝까지 기계어로 번역하는 과정을 계속 반복해야 하기 때문에 디버깅 측면에서는 단점이 있습니다. 컴파일러 언어에는 대표적으로 C, C++, C# 등이 있습니다.
인터프리터는 컴파일러와 다르게 사람이 말을 들으면서 동시에 기계어로 번역합니다. 고급 프로그래밍 언어를 실행하면, 코드를 한 줄씩 읽어 들여 기계어로 번역하여 실행하는 방식입니다. 즉, 번역과 실행 단계가 구분되어 있지 않으며 별도의 실행 파일을 생성하지 않습니다. 이러한 방식은 매번 코드를 실행할 때마다 번역 과정이 반복 수행되어 실행 속도가 C와 같은 컴파일러 언어 대비 느리다는 단점이 있습니다.
속도가 느린데 왜 사용하느냐, 그 이유는 코드 수정이 너무나 간편하기 때문입니다. 인터프리터 언어는 코드를 한 줄씩 기계어로 번역하여 실행하기 때문에 에러가 있다면 해당 코드를 실행하지 못하고 중단됩니다. 모든 코드를 처음부터 끝까지 일단 번역하고 실행하는 컴파일러와는 다르게 인터프리터는 코드에 에러가 있다면 중간에서 멈추게 되는 셈입니다.
크기가 작은 프로그램이라면 모르겠지만, 크기가 큰 프로그램은 컴파일에만 엄청난 시간이 소요되기 때문에, 인터프리터의 이러한 장점은 개발자들에게 굉장히 큰 호응을 얻습니다. 인터프리터 언어의 대표적으로는 파이썬(Python), SQL, Ruby 등이 있습니다.
파이썬은 어떤 OS에서 작성하더라도 코드를 수정할 필요가 없으며, 자연스러운 코드 모델링이 가능합니다.
두 번째 특징: 파이썬은 플랫폼 독립적이며 객체 지향적 언어
플랫폼 독립적이란 특정 운영체제나 기계에 의존하지 않는다는 의미입니다. 반대 의미로 플랫폼 종속적이 있습니다. 플랫폼 종속적인 언어의 대표로 C언어가 있습니다. C언어는 리눅스에서 작성한 코드가 윈도우에서 그대로 실행되지 않습니다. 별도의 컴파일이나 코드의 수정이 필요할 수 있습니다.
플랫폼 독립적인 언어는 어떠한 OS에서 작성하더라도 코드를 수정할 필요가 없습니다. 윈도우에서 작성한 코드를 리눅스나 Mac에서 그대로 활용할 수 있습니다. 말 그대로, 플랫폼과 무관하게 실행이 된다는 의미입니다. 파이썬(Python)이 이에 해당합니다.
또한 파이썬은 프로그래밍 기법 중, 객체 지향적 언어입니다. 프로그래밍 기법은 코드를 작성하는 방식입니다. 프로그래밍은 사람과 컴퓨터가 서로 작성한 글, 코드를 주고받으며 소통하는 분야입니다. 글 쓰는 방식이 모두 똑같지 않은 것처럼, 코드를 작성하는 방식도 여러 가지가 있습니다. 대표적으로 절차를 중시하는 절차 지향 언어와 객체를 활용하는 객체 지향 언어로 나눌 수 있습니다.
절차 지향 언어(Procedual Programming)는 개체를 순차적으로 처리합니다. 코드를 위에서부터 아래로, 순서대로 처리하는 이러한 방식은 컴퓨터의 처리 구조와 굉장히 유사합니다. 따라서 이러한 절차 지향 언어는 처리 속도가 빠르다는 장점이 있습니다. 단, 코드의 유지 보수가 어렵다는 단점이 있습니다. 모든 구성 요소가 유기적으로 연결되어 있어야 하기 때문에, 한 곳에서 에러가 발생하면 프로그램 전체를 수리해야 하는 경우가 생깁니다. 또한 코드가 동일해도 실행 순서가 바뀌면 결과가 달라질 가능성이 높습니다. 이러한 단점을 보완하기 위해 객체 지향 언어가 등장합니다.
객체 지향 언어(Object Oriented Language)는 다수의 객체를 만들고, 이들끼리 상호작용하도록 프로그램을 작성하는 기법입니다. 여기서 객체(Object)란 기능 단위로 이루어진 세상의 모든 것을 의미합니다. 컴퓨터를 예로 들어 볼까요. 컴퓨터라는 거대한 프로그램에는 다양한 기능을 하는 객체들이 모여 있습니다. 중앙 처리를 하는 CPU, 병렬 처리를 지원하는 GPU, 그 외 다양한 입출력 기능을 지원하는 키보드, 스피커, 모니터 등이 있습니다.
객체 지향 언어는 컴퓨터라는 기능을 수행하기 위해 CPU, GPU, 키보드, 모니터와 같은 다양한 부품을 모아서 이들끼리 상호작용 하도록 코드를 작성합니다. 객체 지향 언어는 재사용성이 뛰어나고 자연스러운 모델링이 가능하다는 장점이 있습니다. 현실 세계에 존재하는 개념을 그대로 코딩하여 객체로서 구현하고, 이를 사용하면 되니까요.
또한 객체 지향 언어에서는 각 객체가 독립적이기 때문에 유지보수가 용이합니다. 절차 지향 언어는 코드에 에러가 생기면 모든 코드를 수정해야 하는 경우가 생긴다고 말씀드렸습니다. 그러나 객체 지향 언어에서는 CPU가 고장 났다고 해서 키보드를 바꿀 필요는 없는 것처럼, 특정 코드에서 에러가 발생하면 해당 부분만 수정해 주면 됩니다.
두 번째 특징을 완벽하게 이해하기 위해서는 Class에 대한 개념을 이해하셔야 합니다. Class는 중요하기 때문에 실제로 코드를 작성하시면서 배우는 것을 추천합니다. 따라서 두 번째 특징은 '파이썬은 객체 지향 언어이기 때문에 유지보수가 편리하고 어떤 OS에서 작성해도 동일하게 동작한다.' 정도로만 이해하고 넘어가셔도 됩니다.
파이썬은 변수에 대한 선언이 자유로우며 가독성이 뛰어난 언어입니다.
세 번째 특징: 파이썬은 동적 타이핑 언어이며 가독성이 뛰어난 언어
위에서 배운 두 가지의 파이썬에 대한 특징을 요약하면 'OS 독립적이고 유지보수가 쉬우며 자연스러운 모델링이 가능하다'입니다. 그렇지만 아직 '왜 파이썬인가?'에 대해서는 살짝 부족한 느낌이 듭니다. 그 이유를 알기 위해 세 번째 특징에 대해 계속해서 살펴보겠습니다.
파이썬의 세 번째 특징은 동적 타이핑 언어이자 가독성이 뛰어난 언어란 점입니다.
동적 타이핑 언어란, 변수를 선언하는 시점에 변수의 유형이 결정되는 형식을 의미합니다. 예를 들어볼까요.
동전 지갑에는 동전만 넣을 수 있고, 카드 지갑에는 카드만 넣을 수 있다는 절대적인 규칙이 있다고 가정하겠습니다. 여러분께서 동전 지갑을 하나 샀다고 가정하겠습니다. 이 지갑에 카드를 넣을 수 있을까요? 규칙에 위반되기 때문에 그럴 순 없습니다. 그럼 카드를 보관하려면 카드 지갑을 또 사야겠네요.
또 다른 지갑이 하나 있습니다. 그 지갑은 누군가 동전을 주면, 동전 지갑이 되고 카드를 주면 카드 지갑으로 바뀝니다. 누군가 다가와서 여러분에게 동전을 줍니다. 이 지갑에 동전을 넣을 수 있을까요? 정답은 '넣을 수 있다'입니다. 이 지갑이 바로 동적 타이핑 언어입니다.
정적 타이핑 언어는 매번 다음 상황에 동전을 보관해야 할지, 카드를 보관해야 할지를 고민해야 합니다. 생각만 해도 불편합니다. 그러나 파이썬과 같은 동적 타이핑 언어는 이러한 고민을 할 필요가 없습니다. 상황에 따라 동전 지갑이 되기도 하고, 카드 지갑이 되기도 하니까요. 파이썬은 변수 선언과 관련된 걱정을 줄여줌으로써 개발자로 하여금 편리한 환경을 제공합니다.
다음으로 넘어가 보겠습니다.
가독성이 좋다, 말 그대로 사람이 읽기가 쉽다는 것을 의미합니다. 파이썬의 철학에는 이런 구절이 있습니다.
- "아름다운 게 추한 것보다 낫다." (Beautiful is better than ugly)
- "명시적인 것이 암시적인 것보다 낫다." (Explicit is better than implicit)
- "단순함이 복잡함보다 낫다." (Simple is better than complex)
- "복잡함이 난해한 것보다 낫다." (Complex is better than complicated)
- "가독성은 중요하다." (Readability counts) - 위키백과
모든 철학이 가독성과 관련이 있네요. 철학에서 볼 수 있는 것처럼, 파이썬은 다른 고급 언어들에 비해 사람이 해석하기 편리하게 구성되어 있습니다. 이러한 철학에 대해 파이썬의 독특한 문법이 가독성을 한층 더 높여줍니다.
파이썬은 들여 쓰기로 코드 블록을 구분합니다. 코드 블록을 구분한다는 뜻은 '여기서부터 여기까지는 하나의 코드'라고 영역을 선언하는 것이라고 생각하시면 됩니다. '들여 쓰기' 문법이 얼마나 가독성이 좋은지 직접 비교해 보겠습니다.
C언어로 작성된 코드: 괄호로 코드 블록을 구분
int factorial(int x) {
if(x == 0) {return 1;} else
{return x * factorial(x - 1); } }
파이썬으로 작성된 코드: 들여 쓰기로 코드 블록을 구분
def factorial(x):
return 1 if x==0 else x * factorial(x - 1)
코드가 어떤 의미인지 아는 것은 중요하지 않습니다. 두 개의 코드 중, 어느 코드가 한눈에 들어오시나요? 파이썬이라고 생각하셨다면, 여러분은 파이썬의 가독성에 대해 체감하신 겁니다.
파이썬은 활용 가능성이 무궁무진한 언어입니다.
네 번째 특징: 파이썬은 활용할 수 있는 라이브러리가 풍부한 언어
파이썬은 어느 OS에서 작성해도 동일하게 동작하고, 다른 언어에 비해 사람이 읽기 쉬우며 유지보수가 편리한 언어임을 이제 아셨을 겁니다. 마지막 특징은 파이썬이 왜 널리 활용되고 있는지에 대한 화룡정점입니다.
라이브러리에 대해 알기 위해서는 모듈, 패키지, 라이브러리, 프레임워크에 대한 개념을 먼저 알아야 합니다. 집합으로 포함 관계를 설명드리면 모듈이 가장 작은 집합이고 프레임워크가 가장 큰 집합입니다. 모듈은 패키지의 부분 집합이며 패키지는 라이브러리의 부분 집합이고 라이브러리가 모여 프레임워크를 이룹니다.
모듈은 프로그램에서 어떤 기능을 하는 작은 단위이자 코드 덩어리입니다. 파이썬 파일(.py)이 하나의 모듈이라고 생각하시면 됩니다. 코드를 작성할 때, 필요한 기능을 가진 모듈을 그때그때 호출하여 사용하는 방식을 모듈 프로그래밍이라고 합니다. 이러한 방식은 모든 내용이 하나의 코드 블록에 담겨있는 것보다 가독성이 좋습니다. 또한 유지보수와 재사용이 용이한 장점이 있습니다. 또한 다른 프로그래머가 작성해 둔 모듈을 활용할 수 있기 때문에 협업과 생산성 측면에서도 강점이 있습니다.
패키지는 모듈을 모아두고 관리하는 상위 폴더 또는 디렉토리입니다. 사칙연산 모듈, 미분 모듈, 적분 모듈, 삼각함수 모듈처럼 계산과 관련된 다양한 모듈이 있다고 가정해 보겠습니다. 이 모듈들이 모두 따로 흩어져 있으면, 관리하기가 불편합니다. 그래서 이 모듈을 '공학용 계산기'라는 패키지 안에 모아두는 겁니다. 그리고 미분 기능을 사용하고 싶을 때는 '공학용 계산기 폴더에 있는 미분 모듈을 꺼내줘.'라고 파이썬에게 명령하면 됩니다. 이러한 방식은 관리의 효율성을 높여주는 장점이 있습니다. 대표적인 파이썬의 패키지로 Numpy와 Pandas가 있습니다.
라이브러리는 파이썬에 한해서 패키지와 자주 혼용되어 사용되는 언어입니다. 사실 Numpy나 Pandas는 워낙 다양한 기능을 수행할 수 있기 때문에 라이브러리로 봐도 무방하지만 사전적으로는 패키지의 집합을 라이브러리라고 정의합니다.
예를 들면 위의 '공학용 계산기'와 함께 '행렬 연산기', '선형대수 계산기' 등을 모아서 '수학 라이브러리'를 구성하는 원리입니다. 대표적인 파이썬 라이브러리로는 시각화 라이브러리인 Matplotlib이 있습니다.
프레임 워크는 골격, 뼈대를 의미하는데요. 어떤 Task를 수행하기 위해 최적화된 기초 틀을 제공하는 것을 의미합니다. 이 뼈대에는 아키텍처와 애플리케이션 동작의 기본적인 Flow까지 포함되어 있습니다. 프로그래머는 이 뼈대 위에 코딩을 하는 것입니다. 대표적인 프레임 워크로는 Pytorch와 Tensorflow, Keras가 있습니다.
파이썬에서 활용할 수 있는 라이브러리가 풍부하다는 말은, 코드를 구현할 때 참고할 수 있는 기능의 집합체가 많다는 것을 의미합니다. 그렇기 때문에 파이썬은 데이터 분석부터 인공지능(AI)까지 모든 분야에서 활용될 수 있습니다. 파이썬 프로그래머는 원하는 프로그램을 만들기 위해 그저 다른 프로그래머가 미리 정의한 기능들을 가져와서 이리저리 조합만 하면 됩니다. 심지어 지금 이 순간에도 새롭고 강력한 라이브러리가 계속해서 만들어지고 있기 때문에, 파이썬은 앞으로 더 강력해질 것입니다.
정리하며
파이썬은 OS 독립적이며, 유지보수가 쉽고 가독성이 뛰어나며 협업과 생산성 측면에서 우수하고 활용할 수 있는 기능이 많은 언어입니다.
코딩에 대한 경험이나 지식이 없으신 분들이라면 거부감이 들 수 있습니다. 그러나 거부감을 극복하고 파이썬을 꾸준히 공부할 수 있다면 여러분의 역량은 한 단계 더 성장한 것이라고 자신 있게 말할 수 있습니다.
당장 저만 하더라도, 파이썬에 대해 공부한 이후 회사 생활을 하며 잘 사용하고 있고 그쪽 방면으로 인정도 받고 있습니다. 제가 특별해서 그런 건 아니고, 노력했기 때문이라고 생각합니다. 여러분도 파이썬에 대해 공부하며 저와는 다른 가능성을 확인하셨으면 좋겠습니다.
Reference: 참고한 블로그
#1 파이썬에 대한 정의
파이썬 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
#2 고급 프로그래밍 언어에 대한 정의
고급 프로그래밍 언어 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
#3 컴파일러와 인터프리터에 대한 정리
컴파일러(compiler)와 인터프리터(interpreter)의 차이 (velog.io)
#4 플랫폼 독립성이란?
플랫폼 독립성이란? : 네이버 블로그 (naver.com)
#5 객체 지향 프로그래밍
그린채널 - 절차지향언어 vs 객체지향언어 (greenart.co.kr)
#6 모듈, 패키지, 라이브러리, 프레임워크 차이
[python] 모듈, 패키지, 라이브러리, 프레임워크 차이 (tistory.com)
'Python > 기초' 카테고리의 다른 글
[파이썬/Python 기초] __name__ 에 대해 알아보자. (0) | 2023.07.02 |
---|---|
[파이썬/Python 기초] 모듈과 패키지를 코드로 직접 구현하기 (2) | 2023.07.02 |
쥬피터 노트북에서 파이썬 파일(.py)로 저장하는 방법 (0) | 2023.07.01 |
[파이썬/Python 기초] 모듈, 패키지, 라이브러리, 프레임워크의 차이 (0) | 2023.07.01 |
[기초] 파이썬(Python) from과 import의 차이에 대해 배워보자. (0) | 2023.06.30 |
댓글