[Python] 파이썬 개발자 면접 질문Language/Python2024. 5. 26. 18:04
Table of Contents
파이썬 자료구조 특징
특징 | List | Dictionary | Set | Tuple |
순서 유지 | O | Python 3.7 부터 O | X | O |
인덱싱 | O | X | X | O |
변경 가능성 | O | O | O | X |
중복 허용 | O | 키는 중복 불가, 값은 가능 | X | O |
데이터 | 순차 데이터 | 키-값 쌍 데이터 | 고유한 요소 집합 | 불변 데이터 |
GIL(Global Interpreter Lock)
- Python 매커니즘으로 여러 스레드가 동시에 실행되는 것을 방지 → 한 번의 하나의 스레드만 실행됨
- 목적
- 메모리 관리 - 참조 카운트를 통해 가비지 컬렉터를 작동하는 데, 이 부분이 race condition에 취약함, 이를 해결
- 간소화 - 다중 스레드 환경에서 데이터 무결성을 유지
- 장점
- GIL로 다중 스레드 환경의 복잡한 문제를 쉽게 해결 → 그냥 스레드를 잠궈버림
- 메모리 관리 문제를 해결하여 데이터 무결성 유지
- 단점
- 병렬성 제한 : 멀티쓰레드로 구현해도 실제 동시에 실행되지 않기에 성능상 제약이 발생
비동기 구현 방법
asyncio 기본 모듈을 활용하여 비동기 구현
import asyncio
async def async_function():
print("Async function started")
await asyncio.sleep(1)
print("Async function finished")
asyncio.run(async_function())
데코레이터
함수 데코레이터
def simple_decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@simple_decorator
def my_function():
print("This is my function")
my_function()
클래스 데코레이터
def class_decorator(cls):
class WrappedClass(cls):
def new_method(self):
print("New method added")
return WrappedClass
@class_decorator
class MyClass:
def original_method(self):
print("Original method")
obj = MyClass()
obj.original_method()
obj.new_method()
파이썬의 단점
1. 성능 (Performance)
Python은 인터프리터 언어로, 컴파일 언어(C/C++, Java)보다 일반적으로 느립니다. 이는 Python이 높은 수준의 추상화를 제공하고, 동적 타이핑(dynamic typing)과 가비지 컬렉션(garbage collection) 같은 기능을 사용하기 때문입니다.
2. 높은 메모리 사용량 (Memory Consumption)
Python은 높은 수준의 데이터 구조와 동적 타이핑을 지원하기 때문에, 메모리 사용량이 많을 수 있습니다. 특히, 대규모 데이터 처리 작업에서는 메모리 효율이 낮을 수 있습니다.
3. 약한 멀티스레딩 성능 (Weak Multithreading Performance)
앞서 언급한 GIL로 인해, Python의 멀티스레딩은 CPU 바운드 작업에서 제한적입니다. I/O 바운드 작업에서는 비동기 I/O를 사용하여 효율적으로 처리할 수 있지만, 멀티스레딩을 사용한 병렬 처리에서는 성능상의 제약이 있습니다.
4. 실행 파일 크기 (Executable Size)
Python으로 작성된 애플리케이션을 독립 실행 파일로 패키징할 때, 실행 파일 크기가 커질 수 있습니다. 이는 Python 인터프리터와 필요한 라이브러리들이 포함되기 때문입니다. 이로 인해 배포와 설치가 복잡해질 수 있습니다.
5. 제약된 런타임 타입 검사 (Limited Runtime Type Checking)
Python은 동적 타이핑 언어로, 타입 검사가 런타임에 이루어집니다. 이는 유연성을 제공하지만, 타입 관련 오류를 컴파일 타임에 잡아내기 어렵게 만듭니다. 타입 힌팅(type hinting)과 같은 기능이 추가되었지만, 이는 컴파일 타임 타입 검사를 완전히 대체하지는 않습니다. → Pydantic으로 극복
Type hint와 Pydantic 차이
특징 | Type hint | Pydantic |
목적 | 코드 가독성 및 정적 타입 검사 | 데이터 모델링 및 런타임 데이터 검증 |
검증 시점 | 정적 분석 도구/IDE에서 검사 | 런타임에서 데이터 검증 및 변환 |
사용 용도 | 함수 시그니처, 변수 타입 명시 | 데이터 클래스 정의 및 유효성 검사 |
성능 영향 | 런타임 영향 없음 | 런타임에 데이터 검증 수행으로 약간의 성능 저하 |
오류 처리 | 정적 분석 단계에서 타입 오류 발견 | 런타임에서 ValidationError 발생 |
'Language > Python' 카테고리의 다른 글
[Python 3.13] GIL을 해제해보자 (0) | 2024.10.11 |
---|---|
[Python] GIL이란? 파이썬에서의 멀티쓰레드 (0) | 2024.05.06 |
[Python] Pandas, Numpy 성능 향상 (feat.Pandas vs Numpy) (0) | 2024.05.06 |
Python 3.11 달라진 점 - 업데이트 (0) | 2024.01.15 |
자료구조 - List, Dict, Set, Tuple (0) | 2022.10.27 |