들어가며
Python을 본격적으로 공부하기전에 특징과 기존에 사용하던 언어인 Java와 비교하며 장단점을 알아보았다.
파이썬의 특징
1. 인터프리터 방식
개발자가 작성한 소스코드는 컴퓨터가 알아먹을 수 없다. 그렇기 때문에 컴퓨터가 알아먹을 수 있는 언어(기계어)로 번역이 되어야 하는데 이를 컴파일이라고 한다.
번역을 하는 방식에는 컴파일러와 인터프리터 방식이 있다. 컴파일 방식 프로그램 소스코드를 전체를 스캔하여 모두 번역하고 실행가능한
파일을 만들고(C의 경우 ObejctCode파일) 이 파일들을 묶어서 하나의 실행파일(링킹)작업을 한다. 컴퓨터는 이 파일을 읽어서
최종적으로 명령을 실행한다. C와 Java가 대표적이다.
반면 인터프리터 방식은 소스 코드를 한 줄씩 기계어로 번역하며 명령을 수행한다. 파이썬은 기본적으 인터프리터 방식이다.
(기본은 인터프리터 방식이지만 파이썬의 구현체에 따라 다름)
컴파일 방식과 다르게 실행 과정에서 바이트코드(.pyc)로 컴파일되고 이 바이트코드가 인터프리터나 다른 가상머신에 의해 기계어로 해석되어 명령이 수행된다.
파이썬의 동작원리는 다음과 같다
1. 소스 코드 작성:
• 개발자가 소스 코드를 작성 (.py)
2. 인터프리터 실행:
• 개발자가 작성한 코드는 파이썬 인터프리터가 소스 코드를 한 줄씩 읽으며 실행
3. 파이썬 소스 코드 -> 바이트 코드 변환:
• 파이썬 인터프리터는 소스 코드를 먼저 바이트 코드(bytecode)로 변환한다. 바이트 코드는 .pyc 파일로 저장하고 이는 파이썬의 가상머신(PVM)이 읽고 해석하고 실행할 수 있는 파일이다.
4. 바이트 코드 실행:
• 변환된 바이트 코드는 파이썬 가상 머신(PVM)이 기계어(binarycode)로 번역하며 실제 명령을 수행한다.
- 컴파일 방식과 인터프리터 방식의 차이
구분 | 컴파일러 | 인터프리터 |
번역 범위 | 전체 | 행(줄) |
목적 프로그램 파일 | 생성함 | 생성하지 않음 |
실행속도 | 빠름 | 느림 |
번역 속도 | 느림 | 빠름 |
* 번역? 개발자가 작성한 소스코드를 바이트코드로 변환하는 것
2. 동적 타입
C나 Java와는 다르게 파이썬은 변수의 자료형을 지정하지 않고 단순히 선언하는 것만으로 값을 지정할 수 있다.
변수의 자료형은 코드가 실행되는 시점에 결정된다. 자료형 변환 시 번거로운 과정을 거치지 않아도 되는 장점이 있지만,
실행 도중 예상치 못한 자료형으로 인해 에러가 발생할 수 있다는 단점이있다.
- Python 동적 타이핑 예시
# 초기 변수 선언 및 할당
x = 10
print(f"x = {x}, type of x: {type(x)}")
# 변수에 문자열 할당
x = "Hello, World!"
print(f"x = '{x}', type of x: {type(x)}")
# 변수에 리스트 할당
x = [1, 2, 3, 4, 5]
print(f"x = {x}, type of x: {type(x)}")
# 변수에 딕셔너리 할당
x = {'name': 'Alice', 'age': 30}
print(f"x = {x}, type of x: {type(x)}")
# 실행 결과
x = 10, type of x: <class 'int'>
x = 'Hello, World!', type of x: <class 'str'>
x = [1, 2, 3, 4, 5], type of x: <class 'list'>
x = {'name': 'Alice', 'age': 30}, type of x: <class 'dict'>
3. 플랫폼에 독립적
파이썬은 Java와 마찬가지로 가상머신(PVM) 위에서 실행되기 때문에 실행환경(Linux, Unix, Windows, Mac)에서 모두 동일하게 동작한다. 환경별로 컴파일할 필요가 없기 때문에 한 번 소스 코드를 작성하면 어디서든 활용이 가능하다.
파이썬의 장단점
장점
1. 쉬운 문법
다른 프로그래밍 언어에 비해 쉽고 간결한 문법으로 코드를 작성할 수 있다.
- 문법 예시(출력문)
#Java
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
#Python
print(“Hello world!”)
2. 활발한 커뮤니티와 많은 라이브러리
국내에서는 Java 가 많이 쓰이지만 해외에서는 관심있는 언어 1위를 다툴정도로 인기있는 언어이고
비교적 최신 언어이다 보니 최신 트렌드에 맞는 서비스를 개발할 때, 사용할만한 수많은 라이브러리들을 제공한다.
또한 커뮤니티도 활발하여 문제를 해결하는데 많이 참고할 수 있다.
단점
1. 들여쓰기(Indentation)
파이썬은 Java와 C와 다르게 함수를 괄호로 묶지 않고 들여쓰기를 통해 끝을 표현할 수 있다.
이렇다 보니 if문이나 for문을 사용할 때 문제를 일으킬수가 있다.
2. 속도
파이썬은 기본적으로 인터프리터 방식이기 때문에 컴파일 방식의 언어에 비해 실행속도가 느리다.
3. 동적타입
변수의 타입을 명시하지 않아도 되는 편리함은 프로젝트가 커지고 협업하는데 있어서 어려운 점이 된다.
따라서, ruff, mypy 등 다양한 tool을 통해 타입을 체크하며 개발한다.
Reference
https://cjh5414.github.io/about-python-and-how-python-works/
'프로그래밍 > Python' 카테고리의 다른 글
[Django] AttributeError: 'User' object has no attribute 'has_module_perms' 에러 (0) | 2024.07.12 |
---|---|
[Python] mysql client 설치 에러 (subprocess-exited-with-error..) (0) | 2024.07.10 |
[Python] 파이썬의 자료형을 알아보자 (0) | 2024.07.09 |