Til 24.04.25 모의면접 준비 -파이썬
1. Python의 장점과 단점은 무엇이라고 생각하시나요
- 장점으로는
- 읽기 쉬운 문법 : 파이썬은 간결하고 읽기 쉬운 문법을 가지고 있어 코딩이 더 빠르고 효과적임
- 다양한 용도 : 파이썬은 웹개발 뿐만 아니라 최신기술로 각광받는 데이터 사이언스, 인공지능, 자동화 등의 다양한 부야에서 사용됨
- 풍부한 라이브러리 : 파이썬은 다양한 라이브러리와 프레임크가 풍부하며 개발을 빠르게 할 수 있음
- 커뮤니티 지원 : 파이썬은 거대한 커뮤니티와 풍부한 문서화로 지원되어 있어 문제해결이 보다 간편함
- 단점으로는
- 성능(속도) : 파이썬은 다른언어에 비해 실행 시간이 느릴수 있음
- 컴파일러의 부재 : 파이썬은 인터프리터 언어 이기때문에 컴파일 과정이 없어서 프로그램의 오류를 런타임 중에 발견하게 될수도 있음
- GIL 제한 : 파이썬의 Global Interpreter Lock(GIL)은 멀티스레드 프로그래밍에서 성능을 제한 할수 있음
==>> 파이썬은 읽기 쉽고 다양한 용도로 사용할수있는 강력한 언어 이지만 성능이나 속도 측면에서 약간의 제한이 있을수있음
2. '파이썬은 느리다'라는 문장에 대해 본인의 생각을 기술적 근거를 기반으로 말해주세요.
파이썬은 느리다 라는 말을 기술적 요인에 근거하여 설명하겠습니다
- 인터프리터 언어 : 파이썬은 인터프리터 언어 - 즉 코드를 실행할때 마다 번역하는 과정이 필요합니다. 따라서 컴파일언어에 비해 실행속도가 느릴수 있습니다.
- 동적 타입지정 : 파이썬은 동적타입으로 저정하기 때문에 실행시간에 변수의 타입을 결정해야합니다. 따라서 컴파일언어보다 런타임 오버헤드가 발생할수 있습니다.
- Global Interpreter Lock(GIL) : 파이썬은 멀티쓰레딩을 지원하지만 GIL때문에 한번에 하나의 스레드 만이 파이썬 바이트 코드를 실행할구 있음 - 따라서 CPU- bound작업에 대해서는 성능이 저하될수 있습니다.
==> 그러나 파이썬이 보다 느리다는 점은 항상 문제가 되지는 않습니다. 파이썬은 개발자의 생산성을 높이는 측면에서는 매우 유용합니다.
빠른 개발과 유지보수가 중요한 경우에는 파이썬의 풍부한 라이브러리등이 큰 장점이 될수 있으며 또한, 파이썬에서는 c나 c+로 작성된 코드를 호출하여 보완할수 있음
( 런타임은 프로그램이 실행되는 시간을 가리키고, 오버헤드는 이 실행 과정에서 발생하는 추가적인 비용이나 메모리부담을 나타냄)
3.가상환경이란 무엇인지에 대해서 설명해주세요.
가상환경은 프로젝트 마다 독립적으로 파이썬실행환경을 생성하는 도구 - 이는 각각의 프로젝트가 필요로 하는 패키지들을 분리하여 관리할수 있게 해줌
- ex) 프로젝트 1 에서는 장고 3.0사용, 프로젝트 2에서는 장고2를 사용하려면 각각의 프로젝트마다 독립된 가상환경을 생성하여 패키지 버전을 분리할수 있음
==>> 프로젝트별로 독립된 파이썬 실행환경을 관리해주는것이다.(일관성있는 환경과 버전및의존성 충돌 발지위해)
4.환경변수란 무엇인지 설명해주세요.
환경변수는 운영체제나 프로그램이 실행되는 환경에 대한 정보를 저장하는 변수 - 이변수는 시스템 전역에서 사용 되며 실행중인 프로세스에 영향을 미침 - 가장익숙한 Path환경변수는 운영체제에게 프로그램실행파일의 경로를 알려주는역할을 함
5.파이썬에서 매개변수와 인자의 차이를 설명해주세요.
- 매개변수 :함수정의 할때 사용되는 변수 , 함수가 호출할때 함수에 전달되는 값을 저장함
- 인자 : 함수를 호출할때 전달되는 값 자체를 의미함 - > 함수를 호출할때 인자로 전달된 값은 해당 함수의 매개변수에 대입되어 함수가 실행됨
def add_numbers(x, y):
result = x + y
return result
sum = add_numbers(3, 5)
x,y는 매개변수
3,5는 인자
6.인터프리터와 컴파일러에 대해서 설명해주세요(장단점을 비교해주세요)
- 인터프리터는 코드를 한줄씩 읽어들여 바로 실행하는 프로그램입니다. 코드실행속도는 빠르지만, 실행중 번역과정이 필요하기 때문에 일반적으로 컴파일러보다 느립니다.
- 컴파일러는 소스코드를 한번에 기계어로 번역하여 실행파일을 만듭니다. 실행파일은 컴퓨터에서 직접 실행되므로 실행속도가 빠릅니다. 하지만 컴파일 과정이 필요하고 실행파일을 생성해야하때문에 개발속도는 인터프리터보다 느림
7. 정적타입과 동적타입의 차이에 대해서 설명해주세요 (장단점 비교)
- 정적타입언어는 변수의 타입을 컴파일 시에 결정하며, 변수의 타입을 변경할 수 없습니다. (타입을 작성자가직접 작성하는 언어로 c나 java가 대표)
- 동적타입언어는 변수의 타입을 코드실행시에 알아 결정하며, 변수의 타입을 동적으로 변경할수 있습니다(파이썬이 대표적)
8.클로저(closure)란 무엇이며 어디에 유용한가요?
클로저는 함수와 그 함수가 정의된 환경을 가르키는것입니다. 이를통해 함수가 함수 바깥의 변수에 접근할 수 있습니다.- 주로 콜백 함수나 비동기작업에서 유용하게 활용됩니다. (함수의 유연성을 높여줌, 클로저를 사용하면 코드가 더 간결하고 유연하게 프로그래밍할수 있습니다.)
9. Generator 란 무엇이고 어떻게 사용하나요
제너레이터는 반복가능한 객체를 만들어주는 함수입니다 . 보통의 함수와는 다르게 yield문을 사용해 값을 하나씩 반환하며 , 호출자가 그 값을 받아 올수 있습니다 . 이를 통해 대용량의 데이터를 메모리에 한꺼번에 로드하지 않고도 효율적으로 처리할수 있습니다 .
10. 데코레이터란 무엇인가요
함수를 꾸며주는 특별한기능입니다. 함수를 감싸서 호출되기 전후에 추가적인 작업을 할수 있게 해줍니다.
-예를 들어 , 함수가 실행될때마다 호르를 남기거나 인증을 확인하는등의 작업을 추가할 수 있습니다.
이를 통해 코드를 깔끔하게 유지하면서도 기능을 확장할수 있습니다.
11. 파이썬의 메모리관리 방식에 대해 알려주세요.
파이썬은 자동메모리 관리를 지원하는 고수준언어입니다. 메모리 할당과 해제는 파이썬 인터프리터에 의해 자동으로 처리됩니다. 파이썬은 참조 카운트와 가비지 컬렉션을 사용하여 더이상 사용하지 않는 객체를 수거합니다.
12.파이썬에서 일급객체가 무엇인지 설명해주세요.
일급객체 (first -class object ) : 파이썬에서 모든것은 객체입니다. 함수도 객체이며 다른 객체와 마찬가지로 변수에 할당하고 함수의 인자로 전달하거나 반환할 수 있습니다. 이것을 일급 객체라고 합니다.
13.객체지향이란 무엇인지? 주요 원칙이무엇인지 설명해주세요
Object -Oriented Programming,OOP
객체지향 프로그래밍은 프로그램을 객체들의 모임으로 구성하고, 이들이 상호작용 하도록 설계하는 방법론입니다. 특징으로는 캡슐화, 상속, 다형성이 있습니다.
주요원칙으로는 다섯가지가 있는데
- 단일책임원칙: 클래스는 하나의 책임만 가져야 합니다.
- 개방폐쇄원칙: 확장에는 열려있고 변경에는 닫혀있어야합니다.
- 리스코프 대체 원칙 :상위타입은 하위타입으로 대체 가능해야합니다.
- 인터페이스 분리원칙 : 클라이언트는 자신이 사용하지 않는 인터페이스에 의존합니다.
- 의존성 역전원칙 : 고수준 모듈은 저수준 모듈에 의존해서는 안되며 둘 모두 추상적인 클래스에 의존해야합니다.
14.절차지향 프로그래밍, 함수형 프로그래밍, 객체지향 프로그래밍의 차이점이 무엇인가요
절차지향 프로그래밍은 명령어의 연속으로 프로그램을 구성합니다
함수형 프로그래밍은 함수의 조합으로 프로그램을 구성하며, 부작용을 피하고 불변성을 유지합니다.
객체지향 프로그래밍은 객체의 상호작용으로 프로그램을 구성합니다.
15. list comprehension이란? 사용시 장단점을 본인 사용경험에 근거하여 설명해주세요
list comprehension 은 간단한 방법으로 리스트를 생성하는 파이썬의 기능입니다. 한 줄의 코드로 반복문과 조건문을 사용하여 리스트를 생성할 수 있습니다.
예를 들어 , [x for x in range(10) if x % 2 == 0] 는 0부터 9까지의 짝수를 담은 리스트를 생성함
->코드리뷰할때 이해가 제대로 되지 않은 상태에서 읽으면 가독성이 떨어져 이해하는데 오래걸림
16.PEP8 에 대해 읽어보신 내용 또는 아는 내용에 대해 설명해주세요 아울러 팀프로젝트 코드작성시 컨벤션을 맞추기 위한 어떤 노력을 했는 지 말해주세요
PEP8은 파이썬 코딩 스타일 가이드로 , 파이썬 코드를 작성할 때의 규칙과 권장사항을 정리한 문서입니다. 들여쓰기, 변수명 , 함수명, 주석 등의 작성방법을 통일하여 코드의 가독성을 높이고 유지보수를 쉽게 만듭니다.
팀프로젝트처럼 협업을 하는경우 이러한 컨벤션을 맞추기 위해 PEP8을 준수하고 코드리뷰를통해 공통된 스타일을 공유 하며 일관성을 유지하는 노력을 합니다. - 지금까지는 이게 서툴러서 팀프로젝트 하는데 다른팀원의 코드를 확인할때 헷갈린적이 종종있습니다 앞으로는 잘 준수 해야할것같습니다.
17. mutable 자료형과 immutable자료형에는 어떤것들이 있고 각각 어떤 특징을 가지고 있나요?
- mutable 자료형: 리스트list 딕셔너리dictionary 집합set 등이 있습니다. mutable자료형은 값을 변경할수 있으며 , 동일한 메모리 위치에 여러번 할당될 수 있습니다.
- Immutable 자료형 : 숫자(number), 문자열(string), 튜플(tuple)등이 있습니다. Immutable자료형은 값을 변경 할 수 없으며, 한번 생성된객체는 변경할 수 없습니다.
18. args와 **kwargs의 용도와 사용예제를 설명해주세요
args는 함수에 여러개의 인자를 전달할 때 사용하는 튜플형태의 매개변수 입니다.
kwargs는 함수에 키워드 인자를 딕셔너리 형태로 전달할때 사용하는 매개변수 입니다. 이를 통해 함수를 정의 할때 몇개의 인자가 전달될지 미리 알 수 없는 경우에 유용하게 사용됩니다.
20. 멀티스레딩과 멀티프로세싱의 차이점과 각각의 장단점을 설명해 주세요
멀티스레딩은 동일한 주소공간에서 여러개의 스레드를 생성하여 병렬처리 하는것 입니다.
멀티프로세싱은 각각별도의 주소공간에서 프로세스를 생성하여 병렬처리 하는것입니다.
멀티스레딩은 메모리 공유로 인한 자원 경합이 발생할수 있으며 , 멀티 프로세싱은 프로레스간 통신으로 인한 오버헤드가 발생할수 있습니다.