일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 코테
- Boostcamp AI
- Coursera
- 티스토리챌린지
- Java
- 깨끗한 코드
- data science methodology
- 데이터 사이언스
- 클린코드 파이썬
- IBM
- 자바
- 알고리즘
- 데이터사이언스
- 클린코드
- 소프티어
- 부스트캠프
- Data Science
- Clean Code
- 파이썬
- 코세라
- 프로그래머스
- 코딩테스트
- string
- softeer
- 오블완
- programmers
- AI Mathematics
- 문자열
- Python
- 데이터과학
- Today
- Total
떼닝로그
[Python] Python 기술 면접 대비 본문
출처 : https://www.edureka.co/blog/interview-questions/python-interview-questions/#basicinterviewquestions
참고 : https://heehehe-ds.tistory.com/142
1. List와 Tuple의 차이?
- List는 mutable(가변. 수정 가능)하며, tuple보다 느림
- Tuple은 immutable(불변. 수정 불가능)하며, list보다 빠름
2. Python의 주요 특징들?
- Interpreter 언어. C, PHP, Ruby처럼 실행 전에 컴파일이 필요하지 않음.
- Dynamically Typed 언어. 변수 선언 시 자료형 명시할 필요 없음.
- OOP(객체 지향 언어). class 정의, 상속 사용 가능. C++의 public, private 같은 접근 제한자 X
- 함수들이 first-class object임. 변수에도 함수 할당 가능하며, 함수의 반환값으로 함수를 내보낼 수도 있음
- First-Class Object : 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체.
- 함수의 실질적인 매개변수, 함수의 반환값, 할당의 대상이 될 수 있으며, 비교 연산을 적용할 수 있음.
- python code를 작성하는 것은 빠르지만, 다른 compiled language보다 실행하는 속도는 느리다.
- 해결 위해 C-based extension을 사용하기도 함. (ex. numpy package)
- 여러 분야에서 사용 중임. (ex. web app, automation, scientific modeling, ...)
3. Python은 Programming 언어인지, Scripting 언어인지?
- Scripting도 가능하지만, General-Purpose Programming 언어가 조금 더 맞는 표현...
- Script Language는 다른 응용 프로그램에 삽입되어서 동작하는 언어
- General-Purpose Programming Language는 다양한 도메인의 소프트웨어를 개발하기 위해 설계된 언어
- WWW 웹 페이지 작성에 사용되는 HTML은 범용 언어가 아님. C, Java는 범용 언어
4. Python은 Interpreted Language?
- 컴파일 언어는 컴파일러를 통해 구현되며, 소스 코드를 기계어로 바꾸는 과정을 사전에 처리하여 컴퓨터에서 빠르게 구동될 수 있도록 한 방법
- 인터프리터 언어는 대부분 소스코드를 기계어로 컴파일하지 않고, 인터프리터를 통해 소스코드 실행 시 각 statement를 하나 이상의 서브루틴 순서로 변환한 후, 기계어나 바이트코드 등 다른 언어로 변환되어 구현
- 인터프리터 언어는 인터프리터가 실행을 하기 때문에, 코드가 플랫폼의 영향을 받지 않는다. 하지만 느림
5. PEP8?
- Python Enhanced Proposal으로, Python 코드의 가독성을 maximize 하기 위해 설정된 규칙들
6. Python 사용했을 때의 좋은 점은?
- 쉽게 사용 가능 : python은 high-level programming language
- Interpreted Language : 인터프리터 언어로 line by line으로 실행하고, 에러 발생 시 line 멈춤
- Dynamically typed : 변수 선언 시 자료형 지정하지 않음. 실행하며 자동 할당
- Free and Open Source
- Extensive support for Libraries : 다양한 라이브러리를 갖추고 있음. Python Package Manager(pip)로 쉽게 다른 패키지들도 사용 가능
- Portable : 큰 변경 사항 없이도 다양한 플랫폼에서 운용 가능
7. Python의 namespace?
- 특정한 객체(object)를 이름(name)에 따라 구분할 수 있는 범위 (특정한 하나의 이름이 통용될 수 있는 범위)
- Built-in namespsace : 기본 내장 함수 및 기본 예외들의 이름. 파이썬으로 작성된 모든 코드 범위가 포함
- Global namespace : 모듈별로 존재하며, 모듈 전체에서 통용될 수 있는 이름들이 소속됨
- Enclosing namespaces : 상위 단계, 또는 외부 함수의 namespace
- Local namespaces : 함수 및 메서드 별로 존재. 함수 내의 지역 변수들의 이름들이 소속
8. Python Decorator?
- 구조를 바꾸지 않고 함수에 디자인 패턴을 덧입히기 위해 사용.
- 데코레이터 함수를 먼저 정의하고, 적용할 함수 위에 @ symbol과 함께 데코레이터 함수명을 작성.
- https://bluese05.tistory.com/30 여기에 설명 잘 되어있음
9. Python 기본 내장 자료형은?
- Numbers : integer(정수), floating-point numbers(실수), complex numbers(복소수)
- List : 순서가 있는 요소들의 나열형
- Tuple : list와 마찬가지로 순서가 있는 요소들의 나열형이나, 수정 immutable함.
- String : 문자들의 나열. '나 " 사용해서 선언
- Set : 중복이 없는 원소들의 집합. 순서 X
- Dictionary : {key:value} 쌍으로 묶인 형태. 각 아이템에 대한 순서는 중요하지 않음.
- Boolean : True/False 값
10. Python의 memory 관리 방법?
- Python은 private heap space로 메모리를 관리하고, 주체는 python interpreter. 모든 파이썬 object와 데이터 구조들은 private heap에 위치함.
- python object들의 heap space 할당은 python의 memory manager가 진행. 코어 API들이 몇 개의 툴에 접근 권한을 주기도 함.
- 자체 내장 garbage collector 존재. 미사용 메모리를 재활용함으로써 heap space 관리
11. PYTHONPATH는 무엇인가?
- module을 import할 때 사용하는 환경변수. 어떤 module을 load해올지, interpreter가 사용
12. Python Module은 무엇이고, 어떤 것들이 있는지?
- Python module은 python code를 포함하고 있는 파일들. 함수, 객체, 변수, 모든 것들이 해당.
- python 내장 module : os, sys, math, random, data time, JSON, ...
13. Python에서의 지역변수와 전역변수?
- 전역변수 : 함수 밖에서 선언되거나, 전역 공간에서 선언된 변수들. 프로그램 내 어느 함수에서든 접근 가능
- 지역변수 : 함수 안에서 선언된 변수
14. Python은 Case Sensitive한 언어인가?
- Yes. 대문자와 소문자를 다르게 취급함. 변수 x와 X는 다름.
15. Python의 형변환
- int(), float() : 정수, 실수로 형 변환
- ord() : character type을 정수형으로 변환. ord('A') = 65, ord('a') = 97
- hex(), oct() : 정수 값을 16진수, 8진수로 변환
- tuple(), set(), list(), dict(), str() : 각 type으로 형 변환.
- complex(real, imag) : 복소수 변환. complex(3, 5) = 3+5i
16. Python에서의 array와 list의 차이?
- array와 list 둘 다 데이터를 저장하고 있따는 점은 같으나,
- array는 동일한 data type의 원소들만 가질 수 있고, list는 data type 상관 없음.
17. __init__은 무엇인가?
- 함수, 또는 생성자의 역할을 함.
- 클래스에 새로운 object/instance가 생겼을 때 메모리를 할당하기 위해 자동으로 호출함.
- 모든 클래스는 __init__ method를 가지고 있음.
18. lambda 함수는 무엇인가?
- 익명 함수. parameter의 개수는 상관 없지만, 하나의 statement만 가질 수 있음.
- https://wikidocs.net/64 여기 참고 ㅎㅎ
19. Python에서의 self는 무엇인가?
- self는 객체의 object로, 보통 첫 번째 파라미터로 포함된다.
- class 내의 함수나 속성에 대한 지역 변수와의 구분을 위해 사용.
20. break, continue, pass?
- break : loop에서 특정 조건에 성립될 때 빠져나와 다음 statement로 넘어갈 때 사용
- continue : loop에서 특정 조건이 성립될 때 아래 부분을 건너뛰고 loop의 시작 부분으로 돌아갈 때 사용
- pass : code block이 필요는 하나, 실행을 건너뛰고 싶을 때 사용. 그냥 null 역할로, 실행되었을 때도 아무 일도 일어나지 않음
21. Python iterator는 무엇인가
- iterator는 순서대로 다음 값을 반환할 수 있는 객체 (자체적으로 내장하고 있는 __next__ method 통해 다음 값 가져옴)
- for문을 토해 순회할 수 있는 객체럴 iterable. (iterable은 __next__ 존재하지 않음)
- python의 for문은 내부적으로 iterator를 생성하여 동작.
- https://tibetsandfox.tistory.com/27
22. Python에서 랜덤하게 번호를 만드는 방법들
- random.randrange(a, b) : a 이상 b 미만의 값들 사이에서의 정수값을 가져옴.
- random.uniform(a, b) : a 이상 b 미만의 값 사이에서의 실수값을 반환
23. Python에서 exit 했을 때, 왜 메모리 할당 해제가 되지 않는 것인지?
- 다른 object와의 circular reference가 있거나, global namespace로 참조 중인 object의 경우 항상 de-allocate나 free 되지 않는다.
- C library에서 사용(?) 중인 memory의 일부만을 de-allocate 하는 것은 불가능함
- 하지만 exit 했을 때, 효율적인 clean up 매커니즘을 위해 python은 다른 object들을 de-allocate/destroy 시도
24. Python에서의 삼항 연산자 사용 방법?
- [on_true] if [expression] else [on_false].
- x, y = 25, 50 \n big = x if x < y else y
25. *args, **kwargs는 무엇이며, 왜 써야 하는가?
- *args는 함수로 몇 개의 인자들이 넘어갈 지 확실하지 않을 때 사용하거나, 함수의 인자로 list나 tuple을 보내고 싶을 때 사용
- **kwargs는 몇 개의 keyword arguments들이 사용될 지 모를 때, 또는 dictionary의 값들을 보내고 싶을 때 사용.
- **args, **kwargs는 그냥 일반적인 convention(반복문에서 사용하는 i, j같은)이므로 그냥 *bob **billy로도 바꿀 수 있음
26. list와 비교했을 때 numpy.array의 장점?
- list는 효율적인 general-purpose container. insert, delete, append, concat의 작업을 하기에 좋음.
- list는 "vectorized"된 작업들을 지원하지 않음. 각 요소들에 대한 덧셈, 곱셈 등이 불가능
- NumPy는 효율적이고, 편리함. vector와 matrix 작업을 쉽게 할 수 있으며, 더 빠른 searching, basic statistics 작업 등이 가능
27. Python도 OOP인가?
- python은 객체 지향 프로그래밍 언어... (밑에 가서 잔뜩 할 거임 ><)
28. 깊은 복사와 얕은 복사의 차이?
- 얕은 복사는 참조 포인터를 복사하기 위함. 참조자는 원본 object를 가리키고 있으며, 변동이 있을 경우 원본에도 적용이 됨.
- 깊은 복사는 참조 포인터를 복사하는 것이 아니라, 값만을 가져옴. 원본에 영향을 끼치지 않으며, 프로그램이 느려짐.
29. Python에서의 multi-threading?
- python에도 multi-threading과 관련된 패키지가 있으나, 속도를 빠르게 하기 위해서 사용하는 것은 좋지 않음
- python에는 Global Interpreter Lock(GIL)이라는 구조가 있는데, 이것은 한 번에 하나의 'thread'가 실행될 수 있도록 함. (일종의 mutex) thread가 GIL을 얻으면, 소량의 작업 진행 후에, 다음 thread에 GIL을 넘겨줌
- 굉장히 빠르게 작업이 진행되어 우리가 봤을 땐 parallel하게 실행되는 것처럼 보일 수 있으나, 실제로는 같은 CPU core를 사용
- GIL을 넘겨주는 것은 결국 실행 overhead를 늘려주는 것
- https://it-eldorado.tistory.com/160
여기서부턴 Python OOP 관련
1. Python의 상속에 대해 설명해보쇼
- 상속은 하나의 클래스가 다른 클래스의 모든 멤버(속성, 함수)들을 가지는 것. 기존 기능 재사용 가능.
- 상속으로 코드 재사용성을 제공하고, application을 유지 보수하기에도 쉽게 만듦.
- 상속당하는 클래스(기능을 물려주는 클래스)를 super-class, 상속을 받아 새롭게 만드는 클래스를 derived/child-class라고 부름
- 단일 상속 : 하나의 파생 클래스가 하나의 슈퍼 클래스에서 멤버들을 가져오는 것
- 멀티레벨 상속 : 파생 클래스 d1은 base class base1을 상속, d2는 base2를 상속하는 것
- 계층 상속 : 하나의 base class에서 여러 개의 child class들을 상속할 수 있음
- 다중 상속 : 한 개 이상의 base class로부터 상속을 받아서 한 개의 파생 클래스가 상속되는 것
2. Python의 monkey patching?
- monkey patch는 프로그램이 내부 프로그램을 로컬에서 잠시 다른 기능을 수행ㅎ아도록 수정하거나 확장하도록 하는 방법. 로컬이므로 런타임시에만 영향을 주는 방식.
- test 시에 주로 사용. 다른 기능을 수행하도록 하는 부분 또한 mock object를 원하는 기능을 수행하도록 만든 뒤 그것으로 replace
3. Python은 다중 상속을 지원하는가?
- 다중 상속은 하나 이상의 parent class에서 상속을 받는 것.
- 자바와 다르게 파이썬은 다중 상속이 가능하다.
4. Python에서의 다형성은 무엇인가?
- 다형성은 같은 이름의 메서드나 연산자를 다른 클래스에서 다르게 구현하는 것. 서로 다른 클래스에서 같은 이름의 메서드를 호출하더라도, 결과가 서로 다르게 반환될 수 있도록 하는 것.
- 코드의 가독성과 유연성을 높일 수 있음. 같은 이름의 메서드를 가진 클래스들을 상황에 맞게 선택하여 사용할 수 있고, 코드의 재사용성을 높일 수 있음
5. Python에서의 캡슐화?
- python의 class가 캡슐화의 예시.
- 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶어(캡슐화) 외부에서 직접적으로 접근하지 못하도록 제한(정보은닉)하는 것.
- 객체 내부의 데이터가 보호되고, 외부에서는 메서드를 통해서만 객체에 접근할 수 있음.
- ex. 은행 입금, 출금, ...
6. Python에서의 데이터 추상화
- 자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것.
- 파이선에서 인터페이스와 추상 클래스를 사용함으로써 데이터 추상화 가능.
7. Python의 접근 제어자
- 객체지향 기반 프로그래밍에서는 접근 제어자(private, protected, public)을 이용한 정보 은닉을 통해 외부로부터 데이터 보호.
- 객체의 속성과 메소드를 하나로 묶고, 실제 구현 내용의 일부는 외부에 감추어 은닉할 수 있는 캡슐화 가능
- public(name) : 외부로부터 모든 접근 허용
- protected(_name) : 자기 클래스 내부 혹은 상속받은 자식 클래스에서만 접근 허용
- private(__name) : 자기 클래스 내부의 메서드에서만 접근 허용
'개발로그 > 기타 이론 정리' 카테고리의 다른 글
[Python] " is None " vs " == None " (1) | 2024.11.27 |
---|---|
[CS] 객체 지향 설계의 SOLID 규칙 (OO 5원칙) (2) | 2024.11.08 |
[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스) (4) | 2024.10.08 |
[CS] 객체 지향 프로그래밍의 특징 (2) | 2024.07.05 |