인프런 무료강의 - ⌜Python Programming⌟ 부산대학교 소프트웨어융합교육원
Python 시작하기
인터프리터(Interpreter) vs 컴파일러(compiler)
- 컴퓨터가 인식하는 언어 (기계어)와 인간의 언어(자연어)가 다름
- 음소가 0과 1 (이진수)로 구성 (기계어)
- 0과 1의 조합으로 소수의 기본 명령 구성
- ⇒ 조합의 갯수가 자연어에 비해 극히 한정적
- 기본 명령을 순차적으로 수행하여 복잡한 목표 달성
- ⇒ 자연어가 수행하는 역할들을 기본 명령의 조합으로 구성해냄
- 프로그래밍 언어
- 인간이 이해하고 사용하기 편한 자연어와의 유사성이 높은 언어
- ex) Python, C, C++, C#, Java, Ruby…
- 프로그래밍 언어 또한, 인간의 편의를 위한 언어이므로 기계어(이진수)로의 번역이 필요
High-level 프로그래밍 언어 → 기계어 번역 프로그램 = Compiler, Interpreter 등
Key Difference between Compiler and Interpreter
- 컴파일러 : 전체 프로그램을 한 번에 스캔 후, 번역 진행
compile ⇒ 엮다, 모으다, 편찬하다
Compiler ⇒ 코드로 엮인 프로그램 전체를 번역함
- 인터프리터 : 한 문장 단위로 번역 후 실행
interprete ⇒ 해설하다, 통역하다
Interpreter ⇒ 통역가처럼, 발화자(코드)의 문장 단위로 실시간 해설
/ | Compiler (컴파일러) | Interpreter (인터프리터) |
작동 방식 | - 프로그램 창조 - 오류가 없는지 코드를 해부(parse)하고 분석(analyze)함 - 오류가 있는 경우, 오류 표시 및 미실행 - 오류가 없는 경우, source code를 machine code로 변환 - exe등의 실행가능한 프로그램으로 다른 코드 파일들을 연결 - 프로그램 실행 |
- 프로그램 창조 - machine code 생성기 혹은 연결파일 존재하지 않음 - 소스 선언문이 프로그램 실행이 되는 동안 한 줄씩 실행됨 |
코드 변환 단위 | 프로그램 전체 | 코드 statement 하나 |
번역 시점 | 프로그램 실행 전 컴파일과 실행이 분리되어 있는 작업이므로, 컴파일(번역)이 온전히 끝난 후에 실행된다. | 프로그램이 실행되는 동안 프로그램 실행이 Interprete 프로세스의 한 부분으로서, 한 줄씩 Interprete(번역)되면서 동시에 실행된다. |
디버깅 유연성 | 상대적으로 유연하지 못함 코드 수정 등의 상황 발생 시 전체 절차를 재실행해야함 | 상대적으로 유연함 실행 과정에서 코드의 유연한 변동이 가능함 (Ruby의 경우 서버 재시작 없이 코드 변환 후 테스트 가능) |
코드 분석 및 번역 속도 | 오래 걸림 | 상대적으로 덜 걸림 |
프로그램 실행 속도 | 한 번 번역이 끝난 후에 실행이 빠름 | 한 줄씩 번역 후 실행하므로 상대적으로 느림 |
오류 보고 시점 | 실행 전 코드 전체 스캔 후 오류를 표시함 | 실행 중에 오류가 있을 때 프로그램이 중지되고 오류가 표시됨 |
산출 | 컴파일러는 중간 머신코드 (바이트코드, 오브젝트코드 등)을 생성한다 | 인터프리터는 중간 머신코드를 생성하지 않는다. |
코드 최적화 | 컴파일러는 전체 코드를 미리 확인 ⇒ 코드를 더 빠르게 실행할 수 있도록 많은 최적화를 수행 | 인터프리터는 코드를 한 줄씩 확인 ⇒ 최적화가 컴파일러에 비해 상대적으로 약함 |
메모리 요구사항 | 기계어로 변환된 프로그램은 메모리 사용량이 적음 | 소스 코드 해석에 메모리 사용량이 상대적으로 큼 |
휴대성(portable) | 대부분 플랫폼에서 실행가능한 기계어로 변환 | 플랫폼에 따라 차이가 있음 |
오프라인/온라인 | 오프라인 개발 가능 | 온라인 개발 가능 |
활용분야 | - 독립 실행형 프로그램 개발 (ex. 게임, 컴파일러 자체 등) - 시스템 프로그래밍 (ex. 운영체제, 펌웨어 등) - 성능 위주 어플리케이션 (ex. 게임 엔진, 그래픽 처리 등의 성능이 중요한 앱) |
- 웹 개발 (동적 웹 페이지 생성) - 프로토타입 제작 - 리소스가 제한된 임베디드 시스템 |
관련 언어 | C, C++, C#, Scala, Java*, e.t.c | PHP, Ruby, JavaScript, Python, e.t.c |
*Java의 경우 온전히 컴파일 언어라고만 할 수는 없다. 자바 컴파일러와 자바 인터프리터가 같이 존재한다.
Key Terms for understanding
- Source Code
- 인간이 이해하고 작성할 수 있는 자연어와 유사한 형태로 만들어진 코드. 즉, 프로그래밍 언어.
- C언어, Java 등의 언어
- Machine Code
- 컴퓨터(CPU)가 이해하고 실행할 수 있는 (이진수;binary) 코드. 즉, 기계어.
- Object Code
- 컴파일러 혹은 어셈블러의 출력 단계에서 생성되는 코드. Bytecode와 유사하다. 소스 코드를 컴파일할 때 인텔, AMD, ARM 등 프로세서마다 생성되는 머신 코드가 다르다. 코드를 이식 가능하게 만들기 위해 먼저 소스 코드를 객체 코드로 변환한다. 이는 어떤 프로세서도 이해할 수 없는 중간 코드(머신 코드와 유사)다. 런타임에 객체 코드는 기본 플랫폼의 머신 코드로 변환된다. 나중에 링크라는 단계에서 프로그램의 완전한 빌드에 사용된다.
- ByteCode
https://doozi0316.tistory.com/entry/1주차-JVM은-무엇이며-자바-코드는-어떻게-실행하는-것인가 - 소스코드가 컴파일 된 후 VM(가상 머신)에서 돌아가는 실행 프로그램을 위한 바이트 단위의 코드 시퀀스이다. 주로 Java, C#등의 플랫폼에서 사용된다. 기계어는 모든 컴퓨팅 기기에 동일하지 않고, CPU별로 이해하는 명령어의 집합이 다르다. 따라서 소스 코드로 작성된 프로그램이 컴파일 후 각각의 CPU에서 작동하기 전, 가상 머신에서 작동가능한 Bytecode로 변환되고 이후 바이트 코드가 CPU에서 실행될 수 있는 머신 코드로 다시 변환된다.
- Java의 경우 OS에 종속적이지 않으며, OS의 종속 없이 실행되기 위해 JVM에서 Java 파일을 실행한다. .java 파일을 컴파일하면 JVM(자바 가상머신)에서 실행가능한 바이트코드를 생성하고, 이를 다시 CPU에서 실행하기 위해선 JIT컴파일러를 통해 바이트 코드를 머신 코드로 변환해야한다.
- Parse / Data parsing
- Data Parsing : 비구조화된 데이터 자료에서 관련 정보를 추출하고 쉽게 분석할 수 있는 구조화된 형식으로 변환하는 과정.
- Parse : to separate a sentence into grammatical parts (문법적 해부)
- High-level Languages
- source code와 유사한 표현. 영어(자연어 중 공용어)와 유사하게 만들어진 프로그래밍 과정을 쉽게 만들어주는 C, C++, Java등의 인간 친화적 프로그래밍 언어. low-level language와 대응된다.
- Low-level Languages
https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4 - Machine code(기계어) 그 자체, 혹은 Assembly lannguage 등의 기계어에 1:1로 대응하는 기계친화적 언어. 고급 언어에 비해 인간이 이해하기에 어렵고, 유지보수/디버깅 등이 복잡하다. 고급 언어가 어느 컴퓨팅기기에서던 동일한 구조로 호환되지만 머신코드는 컴퓨터 구조에 따라 사용하는 종류가 다양하며, 이에 1대1로 호응하는 어셈블리 언어 또한 컴퓨터 구조에 따라 달라진다. 어셈블리어는 번역을 위해 assembler가 필요하다.
- Virtual machine (가상 머신)
https://softwareengineering.stackexchange.com/questions/231054/what-exactly-is-virtual-machine-bytecode - 컴퓨터에서 실행하는 모든 소프트웨어를 실행하는데 사용할 수 있는 “소프트웨어 컴퓨터” 의 개념. 일종의 컴퓨팅 시스템을 에뮬레이션하는 기존의 물리적 컴퓨터의 구성요소를 사용하지 않는 디지털화된 컴퓨터 공간. 실제 물리적 컴퓨터 구성요소 대신 가상의 자원을 사용하여 OS, 저장데이터, 네트워크 구현 및 연결 등의 컴퓨팅 기능을 사용할 수 있다. 가상화를 통해 단일 컴퓨터(호스트)는 각각 자체 운영체제, 프로세서 코어, 메모리, 스토리지 및 네트워킹을 사용하여 여러 VM(가상 컴퓨터)을 실행할 수 있다. 가상화를 통해 다수의 소규모 워크로드를 하나의 물리적 컴퓨터에 통합할 수 있으므로 높은 자원 활용을 보장하여 IT 비용을 절감할 수 있다.
- 절차지향과 객체지향의 차이?
- : 절차지향 프로그래밍은 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이고, 객체지향 프로그래밍은 반대로 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식 (https://brownbears.tistory.com/407 참고)
- 절차지향 (Procedural Programming)
- 프로그램 수행에서 프로세스의 순차적인 처리를 중요시하며 프로그램 전체가 유기적으로 연결되도록 하는 기법
- 대표적으로 C 등
- 장점
- 컴퓨터의 처리구조와 유사해 실행속도가 빠름
- 단점
- 유지보수가 어려움
- 실행 순서가 정해져 있어, 코드의 순서 변경시 동일한 결과를 보장하기 어려움
- 디버깅이 어려움
- 객체지향 (Object oriented Programming)
- 프로세스의 기능별 모듈화 (캡슐화)를 통해 같은 기능을 중복으로 연산하지 않고 모듈을 재활용하도록 만든 기법. 데이터와 절차를 하나의 덩어리로 묶은 개념.
- 대표적으로 Java, Ruby, C++ 등
- 장점
- 코드의 재활용성이 높음
- 코딩이 절차지향보다 간편
- 디버깅이 쉬움
-
- 처리속도가 절차지향에 비해 느림
- 설계에 많은 시간이 소요됨단점
Python 사용 준비
Python은 인터프리터 언어이므로, 인터프리터와 통합개발환경 설치 필요
그러나, Google Colab 활용시, 별도의 인터프리터나 개발환경 설정 필요 없이 파이썬 실습 가능
(Google Cloud를 통해 가상의 컴퓨터 사용 가능 ⇒ 인터프리터와 공개 라이브러리 추가 제공)
Colab 시작하기
- 노트명 : 프로젝트 명
- 코드 Cell : Python으로 코딩한 내용
- 텍스트 Cell : 코드에 대한 설명(주석)
- 메뉴 : 파일, 수정 등 기본 기능
- 목차 : 코드에 대한 설명(text cell)의 내용을 기반으로 자동으로 목차 생성 - 기능 단위로 정리
- 찾기
- 코드 스니펫 : Colab에서 사용가능한 외부요소/소스에 접근할 때 참조할 수 있는 카테고리
- 파일
- Notebook : 2,3을 통해 코드 혹은 주석을 작성할 수 있는 화면
실습 예제
코드셀과 텍스트셀 출력
Google Colab은 마크다운 문법 사용 가능
https://colab.research.google.com/notebooks/markdown_guide.ipynb
찾기 및 바꾸기 기능
코드 스니펫
Code snipet : 코드 조각 즉, 재사용 가능한 소스 코드, 기계어, 텍스트의 작은 부분을 의미하며 반복타이핑을 회피할 수 있게 도와준다. 조건문, 반복문 등 부터 카메라 캡쳐 등의 기능 등 다양한 코드 스니펫들이 있다
코드 실행
▶ 버튼 혹은 Ctrl+Enter 를 통해 코드 실행 가능
일부 코드 수정 후 연속 실행
런타임→셀 및 하위 셀 실행 클릭 혹은 Ctrl+F10
수정한 셀 이후 셀 모두 재실행이 가능하다
코드 별 대괄호 [] 안의 숫자가 실행 순서이다. (위치상의 순서가 아닌 실행 시도 순서)
파일 다운로드
ipynb 혹은 py로 다운로드가능
https://velog.io/@dlsrbs98/.py-와-.ipynb의-차이
ipynb : Jupyter Notebook의 문서 형식으로, 코드 셀과 텍스트 셀을 포함하는 대화형 문서
py : 일반적인 텍스트 파일로, 파이썬 코드를 포함
'자운최고지식인되기 > 파이썬 공부' 카테고리의 다른 글
3-2. 선택과반복 [이론 및 실습] (1) | 2025.03.20 |
---|---|
3-1. 선택과 반복 [이론 및 실습] (0) | 2025.03.05 |
2-2. 기본자료형과 입출력 [이론 및 실습] (0) | 2025.02.20 |
2-1. 기본자료형과 입출력 [이론 및 실습] (0) | 2025.02.05 |
1-1. 파이썬 시작하기 [이론] (3) | 2025.02.01 |