-
PEP8에 대해 읽어보신 내용 또는 아는 내용에 대해 설명해주세요. 아울러 팀프로젝트 코드 작성시 컨벤션을 맞추기 위한 어떤 노력을 하셨는지 말해주세요.
- PEP8은 python 코드를 작성할 때 지켜야 하는 스타일 가이드입니다. 이는 코드의 가독성과 일관성을 높이기 위한 규칙을 제공합니다. 예를 들어 들여쓰기는 공백 4개를 사용하고, 코드간 간격은 어떻게 유지할지 등이 포함됩니다. 팀 프로젝트에서 저희는 PEP8 준수를 위해 코드 리뷰를 정기적으로 진행하고, vscode의 extension을 사용하여 코드 스타일을 관리했습니다.
-
python의 GIL(Global Interpreter Lock)이란 무엇이고, 어떤 문제를 발생시키나요?
- GIL(Global Interpreter Lock)은 python 인터프리터에 의해 사용되는 메커니즘으로, 한 시점에 하나의 스레드만이 python 객체에 접근할 수 있도록 제한합니다. 이는 멀티스레딩 환경에서 python의 성능에 제약을 주는데, 특히 CPU 집약적인 작업에서 병렬 처리의 이점을 충분히 활용하지 못하며, 이를 해결하기 위해 멀티프로세싱을 사용할 수 있습니다.
-
mutable 자료형과 immutable 자료형에는 어떤 것들이 있고 각각 어떤 특징을 가지고 있나요?
- list, dictionary 등의 자료형이 mutable에 속합니다. 이들은 생성 후에 그 내용이 변경될 수 있습니다.
- integer, string, tuple 등의 자료형이 immutable 속합니다. 이들은 한 번 생성되면 그 상태가 변경될 수 없습니다. 때문에 값을 변경하려 시도할 경우 새로운 객체가 생성됩니다.
-
args와 **kwargs의 용도와 사용 예제를 설명해주세요.
- *args: 함수에 임의의 개수의 positional argument를 전달할 때 사용됩니다. 예를 들어, def my_function(*args):는 argument들을 튜플로 받아 처리할 수 있습니다.
- **kwargs: 함수에 임의의 개수의 keyword argument를 전달할 때 사용됩니다. 예를 들어, def my_function(**kwargs):는 keyword argument들을 딕셔너리로 받아 처리할 수 있습니다.
-
멀티스레딩과 멀티프로세싱의 차이점과 각각의 장단점을 설명해주세요.
- 멀티스레딩은 리소스 공유가 쉽고, 컨텍스트 스위칭 비용이 낮지만 python의 GIL 로 인해 병렬 처리 성능이 제한적입니다.
- 멀티프로세싱은 별도의 메모리 공간을 가지므로 진정한 병렬 처리가 가능하지만 리소스 사용이 많고, 프로세스 간 통신 비용이 높습니다.