방송대 파이썬 프로그래밍 기초 - 3강. 파이썬의 이해
1. 파이썬의 개요
파이썬의 탄생
• 히도 판로쉼(Guido van Rossum), 1991년 개발
- 네덜란드 암스테르담 대학에서 컴퓨터 전공
- 좋아하는 코미디 'Monty Python's Flying Circus'를 따라 명명, 비단뱀에서 따온 거 아니라고 함.
- 크리스마스 주 연구실이 잠겨 할일이 없어 만든 프로그래밍 언어
- 분산 운영 체제(아메바)의 시스템 관리를 위한 쉘 스크립팅 언어로 개발
→ 갑자기 만들어진 것이 아니라 10년 전부터 계획하여 만들어진 것임을 알 수 있음.
• 파이썬 공식 홈페이지 : https://www.python.org/
* 쉘(shell) [참고]
- 운영체제에서 사용자가 입력한 명령어를 해석하여 운영체제 내부 커널에 전달하는 명령 해석기의 창 또는 인터페이스
- 명령어는 파일 및 디렉토리 관리, 프로세스 제어, 시스템 설정 변경 등 다양한 운영체제의 기능을 수행할 수 있음.
- 쉘은 사용자에게 명령어의 실행 결과를 출력하고, 오류 메시지를 표시하는 등의 역할도 수행함.
- ex. Unix/Linux 운영체제 : Bash(Bourne Again SHell), sh(Bourne SHell), csh(C SHell), ksh(Korn SHell) 등
Windows 운영체제 : Command Prompt(명령 프롬프트), PowerShell(파워쉘) 등
* 쉘 스크립팅 언어(Shell Scripting Language) [참고, 수업X]
- 쉘 환경에서 스크립트(명령어들의 순차적 나열)를 작성하기 위해 사용되는 프로그래밍 언어
- 쉘(shell)에서 명령어를 실행하고, 프로세스 간 통신, 파일 및 디렉토리 관리, 조건문, 반복문 등의 제어문을 사용하여 간단한 작업부터 복잡한 작업까지 자동화하고, 시스템 관리, 자동화 작업, 배치 처리 등에 사용함.
* 파이썬과 쉘 스크립팅 언어의 관계? [참고, 수업X]
- 파이썬은 프로그래밍 언어이지만 다양한 운영체제에서 쉘 스크립팅 언어로 사용될 수 있음.
- 파이썬은 쉘 스크립팅 언어의 장점인 간단한 문법과 다양한 제어문, 변수, 함수 등의 기능을 가지고 있음.
- 파이썬으로 쉘 스크립팅 작업을 편리하게 처리할 수 있어서 쉘 스크립팅 언어로 많이 사용됨.
- 파이썬 스크립트를 실행하기 위해 쉘 환경에서 파이썬 인터프리터를 호출하여 사용하는 경우가 많음.
• 다중 프로그래밍 패러다임 채용
- 프로그래밍 패러다임 : 프로그램을 생성하는 접근방식
- 파이썬은 명령형 프로그래밍, 절차적 프로그래밍, 객체지향 프로그래밍, 함수형 프로그래밍 지원
* 프로그래밍 패러다임 [참고]
- 프로그램을 생성하는 접근방식
- 현실 세계를 컴퓨터 내부로 전달하여 문제를 해결할 때, 현실 세계를 모델링하는 방식에 대한 여러 관점을 규칙화해서 만들어 놓은 것
- 각각의 프로그래밍 패러다임은 특정한 프로그래밍 스타일과 개념을 가지고 있어, 프로그래머가 어떻게 프로그램을 구성하고 동작시킬지에 대한 철학적인 접근을 제공함.
[참고][시험 X]
·명령형 프로그래밍 (Imperative Programming) :
- 프로그램이 실행되는 일련의 명령어들로 이루어진 프로그래밍 패러다임
- 프로그램이 상태를 변경하며 원하는 결과를 얻기 위해 명령어를 순차적으로 실행하는 방식으로 작성됨.
- 파이썬은 변수와 할당, 조건문, 반복문 등을 활용하여 명령형 프로그래밍을 지원함.
·절차적 프로그래밍 (Procedural Programming) :
- 절차적 프로그래밍은 프로그램을 일련의 절차 또는 서브루틴으로 구성하는 프로그래밍 패러다임
- 프로시저(Procedure) 또는 함수를 활용하여 기능을 모듈화하고, 그들 간에 데이터를 주고받는 방식으로 프로그램을 구현함.
- 파이썬은 함수를 정의하고 호출하여 절차적 프로그래밍을 구현함.
·객체지향 프로그래밍 (Object-Oriented Programming) :
- 객체지향 프로그래밍은 프로그램을 객체(클래스)들의 모임으로 구성하는 프로그래밍 패러다임
- 객체는 데이터와 그를 처리하는 메서드(함수)들을 함께 갖고 있어, 데이터와 메서드를 캡슐화하고, 상속과 다형성 등의 개념을 활용하여 프로그램을 구조화함.
- 파이썬은 클래스와 객체를 지원하여 객체지향 프로그래밍을 구현할 수 있음.
·함수형 프로그래밍 (Functional Programming) :
- 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임
- 함수를 일급 객체로 취급하며, 함수의 입력과 출력을 통해 상태를 변경하지 않고 원하는 결과를 도출하는 방식으로 프로그램을 작성함.
• 다목적 활용
- 응용 프로그램과 웹, 백 엔드 개발, 사물 인터넷 분야 뿐만 아니라 교육적인 목적으로도 활용
·라즈베리 파이(Raspberry Pi) : 파이썬을 교육목적으로 사용하는 싱글 보드 컴퓨터 [참고]
·https://www.raspberrypi.org/ : 라즈베리 파이 공식 사이트
·https://projects.raspberrypi.org/ : 라즈베리 파이 재단이 제공하는 온라인 학습 플랫폼
·https://pimylifeup.com/ : 라즈베리 파이와 파이썬을 활용한 다양한 프로젝트와 튜토리얼이 제공되는 사이트
파이썬의 발전 과정
• 1991년 ABC의 후속 프로그래밍 언어로 시작
• 1999년 미 국방성 연구기관인 DARPA에 ‘Computer Programming for Everybody’를 제안 받음.
→ 파이썬을 교육용으로 사용하고 널리 퍼뜨리기 위한 계획을 세우게 된 계기가 됨.
* DARPA와 ARPTNET [참고]
·DARPA(Defense Advanced Research Projects Agency) : 다르파, 미국 국방부의 '방위고등연구계획국'
·ARPAnet(Advanced Research Project Agency) : 아르파넷
- 1969년 DARPA에서 제작한 세계 최초의 패킷 교환 방식을 이용한 네트워크, 인터넷의 기원
- 제작자 빈트 서프(Vint Cerf)는 '인터넷의 아버지'라고 불림.
• 2000년 파이썬 2.0 출시
→ 커뮤니티를 통한 개발 체계 시작
• 2008년 파이썬 3.0 출시
→ 비 하위 호완성을 갖는 메이저 업데이트
- 2.0 소스코드로 3.0 인터프리터를 실행하면 오류가 난다는 의미임.
- 인터넷의 소스코드들은 2.0버전의 것들도 많으니 오류가 날 경우 버전을 확인해 볼 필요가 있음.
* 메이저 업데이트와 마이너 업데이트 [참고]
• 메이저 업데이트(major update) :
- 큰 변화나 새로운 기능을 추가하는 업데이트로, 기존 버전과의 호환성이 떨어질 수 있음.
- 버전을 표시할 때 일반적으로 정수 부분이 변경됨. (ex. 3.0 → 3.2)
• 마이너 업데이트(minor update) :
- 컴퓨터의 부품이나 프로그램에서 기존의 버그나 기능을 소폭으로 개선하는 업데이트
- 버전을 표시할 때 일반적으로 소수점 이하의 표시만 변경됨. (ex. 3.0 → 4.0)
파이썬의 인기
• 2022년 말 TIOBE에 따르면, 파이썬이 여러 다른 언어와 경쟁하다가 2022년부터 1위를 등극함.
→ 리눅스, 유닉스, 윈도우즈 내부를 구성하는 컴퓨터 업계의 중심축인 C언어보다 사용률이 높아진 것에 의미가 있음.
• 데이터 과학 분야, 인공지능 분야에서 Python이 주로 사용되고 있기 때문에 향후 인기가 더 높아질 예정임.
파이썬의 특징과 장단점
• Pythonic
- 파이썬답다는 뜻으로, 독립적, 오픈소스, 인간적, 신속성, 직관적인 파이썬 언어의 특징을 말함.
- 파이썬 커뮤니티에서 파이썬 언어의 특징과 철학에 부합하는 스타일이나 코드 작성 방식을 의미하는 용어
·독립적 : 특정 조직, 플랫폼(운영체제)에 귀속되지 않는 언어
·오픈소스 : 파이썬 인터프리터는 모든 소스 코드가 공개되어 있음.
·인간적 : 사람이 쓰는 자연어와 굉장히 유사함.
·신속성 : 굉장히 여러 라이브러리와 프레임워크 틀이 만들어져 있어서 가져다가 곧바로 프로그래밍할 수 있는 언어
·직관적 : 생각을 곧바로 굉장히 빠르게, 어렵지 않게 코드화시킬 장점을 갖고 있는 언어
※ 파이썬의 '신속성' [참고]
- 개발자들이 빠르게 코드를 작성하고 테스트할 수 있도록 도와주는 기능들을 많이 제공함 (O), 빠른 실행 속도 (X)
- 파이썬은 인터프리터 언어라서 코드를 한 줄씩 해석하고 실행하는 방식으로 동작하기 때문에 컴파일 언어에 비해 실행 속도가 상대적으로 느릴 수 있음.
• 파이썬의 장점
: 오픈소스, 인간적 & 직관적, 생산성 & 신속성, 대형 개발자 커뮤니티, 라이브러리와 프레임워크
• 오픈소스
·파이썬 관련 개선을 위한 제안(PEP, Python Enhancement Proposal)
- 많은 개발자의 의견을 수용하고 토론하며 발전한 언어
- 새로운 파이썬의 기능, 파이썬 프로세스, 환경에 대해 커뮤니티에 설계 문서나 정보를 제공
- 파이썬 기능의 간결한 기술적 사양과 기능을 위한 근거들을 제공
- 커뮤니티의 의견을 수집, 합의 도출, 반대의견 청취
·PEP 8 style guide :
- 파이썬 코드의 작성 규칙과 스타일을 명시한 문서
- 파이썬 커뮤니티에서 공식적으로 권장하는 코드 작성 스타일 가이드
- 공식 영문가이드 : https://peps.python.org/pep-0008/
- 한글가이드 : https://codechacha.com/ko/pythonic-and-pep8/
• 인간적 & 직관적
- 실행할 수 있는 의사 코드 수준의 문법
- 의사코드(Excutable pseudocode) : 특정 프로그래밍 언어의 문법에 따라 쓰인 것이 아니라, 일반적인 자연어로 코드를 흉내 내어 알고리즘을 표현하는 방법
→ 다른 프로그래밍 언어보다 훨씬 덜 프로그래밍 언어 같아서 모르는 사람이 얼핏 보아도 어느 정도 해석이 가능함.
- ex. if 10 in [10, 20, 30, 40]: print(“10이 들어있습니다”)
→ 해석 : 리스트 [10, 20, 30, 40]에 10이 포함되어 있으면 “10이 들어있습니다”를 출력하시오.
• 생산성 & 신속성
- 파이썬은 문법이 간단하고 가독성이 높아 코드를 간결하게 작성할 수 있음.
→ 개발자들은 빠르게 코드를 작성하고 유지보수할 수 있음.
• 대형 개발자 커뮤니티
- 검색을 통해 문제를 빠르게 찾아서 해결할 수 있음.
• 라이브러리와 프레임워크
- 다양한 라이브러리와 프레임워크가 풍부하게 제공되어 빠르게 원하는 기능을 구현하여 개발시간을 단축할 수 있음.
[참고]
·라이브러리(library) :
- 개발자가 필요할 때 선택적으로 사용할 수 있도록 미리 만들어져 있는 도구 모음
- 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함함.
- ex. NumPy, pandas, matplotlib
·프레임워크(Framework) :
- 특정 프로그램을 개발하기 위한 구조와 메뉴얼을 제공하는 프로그램
- 개발을 위한 구조와 규칙을 갖춘 코드의 집합으로, 개발 프로세스를 단순화하고 일관성 있는 코드 작성을 도와줌.
- ex. Flask, Django, Angular, Vue
·파이썬의 라이브러리와 프레임워크 [참고]
NumPy | ·파이썬의 수학 및 과학 연산을 위한 핵심 라이브러리 ·다차원 배열과 행렬 연산을 지원하며, 수학 함수들을 포함함. ·데이터 과학, 머신 러닝, 딥러닝 등의 분야에서 사용됨. |
주피터 랩 (Jupyter Lab) 주피터 노트북 (Jupyter Notebook) |
·데이터 과학, 머신 러닝, 딥러닝 등의 작업을 위한 대화형 개발 환경 ·코드와 문서, 시각화, 실행 결과를 하나의 문서에 통합하여 편리하게 작업할 수 있도록 도와줌. |
Flask와 Django | ·파이썬 웹 개발을 위한 웹 프레임워크로, 웹 애플리케이션을 빠르게 개발 후 배포할 수 있는 도구 ·Flask : 마이크로 웹 프레임워크로, 간단한 웹 애플리케이션 개발에 적합함. ·Django : 대규모 웹 애플리케이션 개발에 적합한 풀 스택 웹 프레임워크 |
matplotlib와 bokeh | ·데이터 시각화를 위한 파이썬 라이브러리로, 그래프나 차트 등을 생성하고 시각적으로 표현함. ·matplotlib : 일반적으로 정적인 그래프를 생성에 사용됨. ·bokeh : 인터랙티브한 그래프 생성에 사용됨. |
pandas | ·데이터 처리와 분석을 위한 파이썬 라이브러리 ·데이터를 다양한 형태로 처리하고, 데이터베이스와 같은 작업을 수행할 수 있는 기능을 제공함. |
astropy, biopython, supy | ·astropy : 천문학 데이터 처리를 위한 라이브러리로, 천문학 연구에 사용됨. ·biopython : 생물 정보학 데이터 처리를 위한 라이브러리로, 생물학 연구에 사용됨. ·supy : 입자 물리학 연구를 위한 라이브러리로, 입자 물리학 연구에 사용됨. |
PyTorch, TensorFlow | 딥러닝을 위한 라이브러리 ·PyTorch : Facebook에서 개발, 동적 계산 그래프를 사용, 코드가 직관적이고 읽기 쉬움, ·TensorFlow : 구글에서 개발, C++기반의 고성능 계산 그래프를 사용, 정적 계산 그래프를 지원함. |
• 파이썬의 단점
·C나 Java 등으로 작성된 프로그램보다 느린 속도
·완전한 애플리케이션 단독 개발이 불가능 [아래 이유는 참고]
- 인터프리터 언어라서 다른 컴파일 언어에 비해 상대적으로 느린 처리 속도, 코드 일부 노출 가능함.
- 애플리케이션 개발에 필요한 모든 기능이 파이썬 라이브러리에 있는 게 아님.
- 애플리케이션 배포나 실행을 위해서는 실행환경에 대한 고려가 필요함.
→ Rust 또는 Go 고려
2. 파이썬 프로그램의 실행
파이썬 실행 환경
• 플랫폼에 독립적이며 인터프리터식 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어
·플랫폼에 독립적 : 윈도우, 리눅스, 유닉스, 맥OS 등 다양한 운영체제(플랫폼)에서 별도의 컴파일 없이 실행 가능
·인터프리터식 : CPython(C+Python), PyPy(빠른 실행속도), Cython, Jython 등 다양한 인터프리터 환경 사용 가능
·객체지향적 : 프로그램을 객체로 모델링
·동적 타이핑(dynamically typed) : 변수의 자료형을 지정하지 않음.
·대화형 언어 : 작성한 코드에 대한 수행 결과를 바로 확인하고 디버깅하면서 코드 작성 가능
• Cpython
- C언어로 개발된 파이썬 인터프리터 → C 구현 라이브러리와의 연동을 통한 확장에 최적
- 오픈소스로서 커뮤니티의 기여로 지속적인 발전 : https://github.com/python/cpython
- CPython은 소스 대 소스 컴파일러 형태로 동작 : 파이썬 소스 코드를 바이트 코드(.pyc)로 컴파일하고, 이를 바로 실행하는 대신에, 인터프리터가 해당 바이트 코드를 실행하는 방식으로 동작함.
• 컴파일러의 유형 [예시는 참고]
·셀프 호스팅 컴파일러 : 부트스트래핑 단계를 통해 자신의 언어로 작성한 컴파일러
- GCC(GNU Compiler Collection) : C, C++, Objective-C, Fortran 등 다양한 언어의 컴파일러를 포함하고 있으며, 자기 자신을 컴파일하여 새로운 버전의 GCC를 생성
·소스 대 소스 컴파일러 : 타 언어로 작성된 소스 코드를 컴파일하여 동일한 언어의 소스 코드로 변환하는 컴파일러
- Babel : JavaScript를 더 오래된 ECMAScript 표준에 해당하는 JavaScript로 변환해줌
- TypeScript : 정적 타입을 지원하는 JavaScript의 상위 집합 언어로, TypeScript 코드를 JavaScript 코드로 변환하여 실행될 수 있도록 해줌.
·컴파일러와 인터프리터의 역할 : 소스 코드를 기계어로 바꾸어줌.
• 파이썬 프로그램 실행과정
1) 파이썬 애플리케이션은 텍스트 파일로 작성되어 있는 소스 코드 형태로 배포됨.
2) 소스코드는 파이썬 인터프리터로 전달되어 내부에 있는 CPython이 동작함.
2) CPython은 파이썬 소스 코드를 컴파일하여 바이트코드로 변환함.
3) 바이트코드는 .pyc 파일로 저장되어 이후에 재실행될 때 빠르게 실행될 수 있도록 준비됨.
4) 파이썬 가상머신(PVM)은 바이트코드를 한 라인씩 읽어들여 실행함.
5) 소스코드가 수정되지 않은 상태로 변경없이 재실행 시, 이미 컴파일된 바이트코드로 빠르게 실행됨.
→ 파이썬 프로그램은 소스 코드를 CPython을 통해 컴파일하여 바이트코드(.pyc파일)로 변환하고, 이를 파이썬 가상머신에서 실행하는 과정을 거치며, 변경이 없는 경우 빠르게 실행될 수 있음.
* 바이트코드 [참고]
- 파이썬 가상머신(PVM)에서 실행되는 중간 단계의 코드
- 파이썬 프로그램이 플랫폼 독립적으로 실행될 수 있도록 파이썬 인터프리터가 파이썬 가상머신(PVM)을 통해 중간 언어로 만드는 것
- 기계어보다는 파이썬 인터프리터가 이해하기 쉬운 형태로 변환되어 있음.
3. 파이썬 프로그래밍 환경
• IDLE
- 기본으로 포함된 파이썬의 통합 개발 환경(IDE, Integrated Development Environment)
- 파이썬과 Tkinter GUI 툴킷이 합쳐져서 개발
- 구문 강조, 자동 완성, 스마트 들여쓰기 등이 포함된 단순한 IDE 지향
- stepping, breakpoint, call stack을 확인할 수 있는 통합 디버거 환경 제공
- 파이썬 공식 홈페이지에서 다운로드 가능
https://www.python.org
• 주피터 노트북
- 오픈소스 기반의 웹 플랫폼
- 파이썬을 비롯한 40여개의 프로그래밍 언어 지원
- 전통적인 소스코드-컴파일-실행 방식에서 벗어나 IPython 사용하여 웹 기반 대화형 개발 및 실행 환경
- 문서화하여 다른 사람과 공유하기가 편리
- 마크다운(Markdown)을 이용하여 코드 관련 타이틀, 설명 등 작성 가능
http://[호스트IP]:8888
• 구글 Colab
- 2017년 과학 연구와 교육을 목적으로 개발, 일부 유료 서비스
- 클라우드 기반 주피터 노트북 개발 환경
- 주피터 노트북 + 구글 드라이브를 결합한 서비스
- 데이터 분석 및 딥러닝 연산 등 고성능 컴퓨팅 리소스 활용 가능
https://colab.research.google.com/

* 마크다운 언어와 마크업 언어 [참고, 수업X]
·마크다운 언어 : 간단하고 가독성이 좋은 텍스트 기반의 마크업 언어임.
·마크업 언어 : 태그(tag)와 같은 특정한 구조를 사용하여 문서를 작성하는 언어, HTML이 대표적임.
특성 | 마크다운 언어 | 마크업 언어 |
문법 | 간단하고 직관적 | 복잡하고 상세 |
작성 방식 | 텍스트 파일에 문법적 규칙을 적용하여 작성 | 태그와 속성을 이용하여 구조화된 문서 작성 |
읽기/쓰기 가능성 | 대부분의 텍스트 에디터에서 읽고 쓰기 가능 | 특정한 도구나 언어에 종속적일 수 있음 |
가독성 | 높음 | 낮음 |
확장성 | 낮음(제한적) | 높음 |
활용 분야 | 간단한 문서 작성, 블로그, 웹 페이지 등 | 웹 개발, 문서의 구조와 서식을 세부적으로 제어해야 할 때 등 |

4. 구글 Colab에서 실습하기
- 실습 내용
1) Google Colab 접속 후 로그인
2) 파일 이름 변경하기
3) 간단한 계산문제 테스트
4) 문서화하기
5) 코드블록 삭제하기
6) 설정메뉴 살펴보기
7) 왼쪽 탭 살펴보기
1) 구글 Colab 접속 후 로그인
Google Colaboratory
colab.research.google.com
권장하는 웹 브라우저 : Google Chrome, Microsoft Edge 등 크로미움 기반의 브라우저
하단의 '새 노트'를 누르면 새로운 파일을 생성할 수 있음.
ipynb(ipython notebook)은 py파일로 확장자 변경 가능함.
2) 파일 이름 변경하기
상단에 'Untitled0' 누르면 파일명 변경 가능함.
여기서 작업하면 클라우드에 자동저장됨. → 기본값이 자동저장으로 되어 있음.
모든 변경사항이 저장됨 = 자동저장이 완료됨
3) 간단한 계산문제 테스트
• 계산결과가 나오는데 약간 시간이 걸리는 이유?
웹 브라우저를 통해 원거리 서버에 접속한 상태로, 코드를 전송해서 실행 결과를 기다리는 중임.
구글의 클라우드 서비스 GCP로부터 자원을 할당받는 데 시간이 소요되어, 처음에는 약 3~10초 대기시간이 필요함.
할당받은 이후에는 계산 결과가 빠르게 나옴.
리소스 = 컴퓨팅 장치 또는 자원
무료버전은 저사양 컴퓨터 한 대가 할당됨.
특정 램과 디스크를 갖는 컴퓨터가 할당된 걸 볼 수 있고, 서버를 통해 실행하고 하단에 결과를 보여주는 것.
실행 방법 : 실행버튼 혹은 Ctrl + enter
블록으로 만들어서 중간 결과를 확인해볼 수 있음.
4) 문서화하기
'+텍스트' 누르면 마크다운 기반의 텍스트를 입력할 수 있음
주석과 별도로 존재하는 기능임.
제목전환, 굵기, 위 아래 이동 가능하며, 일종의 웹 에디터처럼 활용 가능함.
5) 코드블록 삭제하기
오른쪽 상단 휴지통 누르기
6) 설정메뉴 살펴보기
화면 우측 상단의 톱니바퀴 = 설정
글꼴 크기 : 28px
들여쓰기 너비 : 4
행번호 표시 체크 (보이게)
7) 왼쪽 탭 살펴보기
'파일' 항목 : 구글 드라이브과 연동 가능함.
참고문헌
http://wiki.hash.kr/index.php/%EC%95%84%EB%A5%B4%ED%8C%8C%EB%84%B7
https://ko.wikipedia.org/wiki/%EC%9D%98%EC%82%AC%EC%BD%94%EB%93%9C
https://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC_(%EC%BB%B4%ED%93%A8%ED%8C%85)