파이썬 시작하기
파이썬 프로그래밍 언어에 대해 알아보고 파이썬을 통해 무엇을 할 수 있는지 알아 본다.
파이썬 이란 ?
파이썬(Python)은 대표적인 컴퓨터 프로그래밍 언어중 하나로 1990년 네덜란드의 뒤도 반 로섬(Guido van rossum)에 의해 개발 되었다. 처음 파이썬은 비교적 간단하게 배우고 빠르게 사용할 수 있다는 특징을 가진 인터프리터 언어 였으며 20년이 넘는 시간이 흐르면서 많은 변화와 함께 세계에서 가장 널리 사용되는 언어중 하나가 되었다.
인터프리터 언어
프로그래밍 언어는 크게 컴파일 언어와 인터프리터 언어로 구분할 수 있다. 컴파일 언어는 C, Java 등이 대표적이며 사람이 이해할 수 있는 형태로 작성된 소스코드를 컴퓨터가 이해할 수 있는 형태로 컴파일 하는 과정을 거친다. 반면 인터프리터 언어는 인터프리터가 소스코드를 한줄씩 읽어 실행하는 방식으로 컴파일 과정이 필요 없다.
동적 타입언어와 정적 타입언어
보통 컴파일 언어는 정적 타입 언어이고 인터프리터 언어는 동적 타입 언어로 구분할 수 있다. 정적 타입 언어는 변수의 타입을 컴파일 시점에 결정하고 컴파일러가 타입을 검증하며 동적 타입 언어는 실행 시점에 타입을 결정하고 인터프리터가 타입을 검증한다. 파이썬은 동적 타입 언어중에서는 비교적 엄격한 타입을 지원하는 강타입 언어로 구분된다. 보통 초기 개발은 동적 타입 언어가 편리한 부분이 많지만 대규모 개발의 경우 정적 타입 언어의 특징이 요구 된다.
파이썬이라는 이름은 개발자 귀도가 즐겨보던 코미디 몬티 파이썬의 날아다니는 서커스(Monty Python's Flying Circus) 에서 따온 것으로 알려져 있고 동물중에는 비단뱀을 파이썬이라고 하기 때문에 파이썬 로고에 비단뱀 모양이 형상화 되어 있다.
파이썬은 2024년 1월 현재 프로그램 언어 활용 순위를 집계하는 TIOBE Index에서 작년에 이어 부동의 1위를 차지하고 있을 정도로 널리 사용되고 있으며 특히 인공지능, 빅데이터 연구 분야에서 많이 사용되고 있다.
파이썬의 주요 특징은 다음과 같다.
인터프리터 언어- 신속한 코딩과 실행, 결과 확인 등이 가능하다. 동적 타입 언어로 처음 배울때 손쉽게 시작할 수 있으며 파이썬 노트북 등의 도구를 사용하면 쉽게 실행 결과를 코딩 단계마다 확인하고 기록할 수 있다.
객체 지향 언어- 파이썬은 순수 객체지향 언어로 소위 원시 데이터형(Primitive Type)이 존재 하지 않는다. 클래스, 함수 등 모든것이 객체로 간주되며 객체지향 언어의 특징인 상속, 다형성 등을 지원한다. 다만 정적 언어 요소가 부족한 부분으로 일부 객체지향 언어 특징 구현은 불편하지만 객체지향 뿐만 아니라 함수형 언어의 특징도 풍부하게 지원해 멀티 패러다임 언어로 불리기도 한다.
효율적인 코드 구조- 들여쓰기 기반 블록 처리, 라인 구분을 위한 세미콜론(
;) 사용 안함, 동적 타입언어로 타입 선언 안함 등 코드 구조를 단순하게 만들어 준다. 과학 및 공학 친화- 공학 및 과학 연구 관련 라이브러리가 많이 개발되어 있고 특별한 코딩 경험이 없이도 쉽게 사용할 수 있다. 이러한 특징으로 인공지능, 빅데이터 등의 연구 분야에서 많이 사용되고 있다. 현재 AI 분야 연구에서 주로 사용하는 텐서플로우(Tensorflow)와 파이토치(Pytorch)는 모두 파이썬으로 개발되었다.
생태계- 수치 연산에 특화된 NumPy, 데이터 처리에 특화된 Pandas, 데이터 시각화를 위한 Matplotlib, Seaborn, 머신러닝을 위한 Scikit-learn 등 다양한 라이브러리가 개발되어 있고 임베디드 시스템에서 웹 어플리케이션까지 다양한 분야에서 활용이 가능하다. 또한 많은 개발자 커뮤니티가 활발하게 활동하고 있어 다양한 라이브러리와 정보를 얻을 수 있다.
참고 사이트
- 파이썬 홈페이지: https://www.python.org/
파이썬 디자인 철학
파이썬 언어의 디자인 철학은 2004년 발표된 PEP20 문서에 잘 나타나 있다.
- 아름다운 것이 추한 것보다 낫다. (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!)
[출처: The Zen of Python, by Tim Peters, https://peps.python.org/pep-0020]
파이썬 활용 분야
파이썬은 범용 프로그래밍 언어로 다양한 분야에서 활용이 가능하다. 특히 배우기가 쉬워 처음 프로그래밍을 배우는 사람들이 많이 사용하고 있으며 과학 기술, 인공지능, 빅데이터 연구 분야에서 많이 사용되고 있다.
코딩 교육- 파이썬은 배우기가 쉽고 간결한 문법으로 코딩 교육에 많이 사용되고 있다. 간결한 문법으로 쉽게 코딩을 시작할 수 있으며 CLI 및 GUI 프로그램도 쉽게 개발할 수 있다. 뿐만 아니라 라즈베리파이, 아두이노 등의 임베디드 시스템에서도 활용이 가능해 다양한 분야에서 코딩 교육에 사용되고 있다.
데이터 처리- 파이썬이 제일 강점을 나타내는 분야중 하나이다. 여러 형태의 파일을 쉽게 읽고 쓸 수 있으며 데이터 처리를 위한 다양한 라이브러리가 개발되어 있다. pandas, numpy 와 같은 라이브러리를 사용해 데이터를 쉽게 처리할 수 있으며 matplotlib, seaborn 등의 라이브러리를 사용해 데이터를 시각화 할 수 있다. 이러한 데이터 처리 특화 부분은 인공지능 관련 프로그래밍에서도 많이 활용되고 있다.
인공지능- 대표적인 인공지능 프레임워크인 텐서플로우(Tensoflow), 파이토치(Pytorch)는 모두 파이썬으로 개발되었다. 인공지능 연구 분야에서는 파이썬을 사용하는 것이 거의 필수적이다. 앞에서도 언급한 데이터처리와 시각화 라이브러리를 활용해 데이터를 처리하고 시각화 할 수 있으며 인공지능 모델을 쉽게 개발할 수 있다.
웹 개발- 백엔드 웹 개발에서도 많이 사용되고 있다. 파이썬은 웹 개발을 위한 다양한 프레임워크가 개발되어 있으며 Django, Flask 등이 대표적이다. 최근에는 Rest API 를 중심으로 웹 개발이 진행되고 있는데 Fast API 라는 프레임워크가 인기를 끌고 있다.
파이썬은 만능인가?
물론 파이썬이 많은 장점을 가지고 있고 다양한 분야에서 활용이 가능하지만 모든 분야에서 사용하기에는 한계가 있다.
- 파이썬은 인터프리터 언어로 컴파일 언어에 비해 실행 속도가 느리다는 단점이 있다.
- 인터프리터 언어라는 부분은 장점과 단점 모두를 가지고 있으므로 본인이 필요한 영역에 맞게 잘 선택해야 한다.
- 일부 속도가 느린 부분에 대해서는 C, C++ 등의 언어로 개발된 라이브러리를 사용하면 된다.
- 동적 타입 언어로 정적 타입 언어에 비해 타입 검증이 부족하다는 단점이 있다. 개인 프로젝트나 소규모에서는 크게 문제가 되지 않지만 대규모 개발에서는 문제가 될 수 있다.
- 데이터베이스 연동 프로그램도 당연히 가능하지만 대규모 데이터베이스 시스템 개발에는 적합하지 않다.
- 게임, 멀티미디어, 윈도우용 업무 프로그램 개발 등도 적합하지 않다.