파이썬 면접 예상 질문과 대답

미남잉·2024년 12월 11일
0

출처: Python Interview Questions for Experienced with PDF

면접을 준비하며, 파이썬에 대한 질문이 많은데 기초적인 거라도 대답하기에 어려움을 느껴서 위 링크를 바탕으로 기출 질문을 정리하였습니다. 번역하고 제가 잘 모르는 것은 추가 개념을 보충해두었습니다.

Python Basics (but Deeper)

  1. What are Python’s built-in data types?
    주요 데이터 타입에는 int, float, str, list, tuple, set, dict가 있습니다. 각각은 특정 종류의 정보를 저장하는 데 사용된다.

  2. Explain the difference between lists and tuples.

    리스트와 튜플 모두 항목의 모음을 저장하지만, 리스트는 변경 가능(mutable)하며, 튜플은 변경 불가능(immutable)하다. 튜플은 리스트보다 더 빠르고 메모리 효율적이다.

  3. What is list comprehension in Python?

    리스트 컴프리헨션은 대괄호 안에 로직을 작성하여 리스트를 빠르게 생성하는 방법이다. 반복문보다 간단하고 빠르다.

  4. How are list comprehensions used?

    리스트 컴프리헨션은 리스트를 간결하게 생성할 수 있는 방법을 제공하는데, 예를 들어 squares =[x**2 for x in range(10)] 은 0부터 9까지의 제곱수를 포함한 리스트를 생성한다.

  5. What are Python decorators?

    데코레이터는 다른 함수의 동작을 수정하는 함수이다. 원래 함수의 코드를 변경하지 않고 추가적인 기능을 부여한다.

  6. How does Python handle memory management?

    파이썬은 자동 가비지 컬렉터를 사용하여 메모리 할당과 해제를 관리한다. 참조 카운팅(reference counting)과 순환 검출(cycle detection)을 결합하여 작동한다.

    a. Reference counting

    어떤 객체가 참조되고 있는지 횟수를 카운팅하고 0이 될 경우에 메모리에서 해체한다.

    b. Generational garbage collection

    메모리 관리를 최적화하기 위해 객체를 세대(generation)로 나누어 관리하는 기술이다. 자주 참조되지 않은 객체를 효율적으로 정리하고, 장기간 유지되는 객체에 대한 가비지 컬렉션에 대한 부담을 줄이는 방식으로 작동한다.

Object-Oriented Programming (OOP)

  1. What is the difference between __init__ and __new__?

    __init__ 은 새로 생성된 객체를 초기화하고, __new__ 는 객체 자체를 생성한다.

  2. Explain multiple inheritance in Python.

    다중 상속은 하나의 클래스가 여러 부모 클래스를 상속받는 것을 의미한다. CS 선형화 알고리즘(MRO)를 사용하여 문제를 해결한다.

  3. What are static methods and class methods?

    정적 메서드는 selfcls 매개변수를 사용하지 않으며, 일반 함수처럼 동작한다. 클래스 메서드는 cls 를 사용하여 클래스 상태를 변경할 수 있다.

  4. What is inheritance in Python?

    상속은 한 클래스가 다른 클래스의 속성과 메서드를 사용할 수 있게 하는 기능이다. 이를 통해 코드를 재사용하고 체계적으로 유지할 수 있다.

  5. What is method overriding in Python?

    메서드 오버라이딩은 하위 클래스가 부모 클래스와 동일한 이름의 메서드를 정의하여 자신의 버전을 제공하는 것이다.
    부모 클래스의 메서드를 덮어쓰지만, super()를 사용해 부모 클래스의 메서드도 호출 가능.

  6. What are dunder (double underscore) methods?

    더블 언더스코어 메서드는 __init__ 이나 __str__ 를 가진 메서드로, 객체의 동작을 정의하거나 사용자 지정하는 데 사용되는 특별한 메서드이다.

    • __init__: 객체 생성 시 호출되는 생성자 메서드
    • __str__: 객체를 문자열로 표현할 때 호출되는 메서드
    • __repr__: 객체의 공식적인 문자열 표현을 반환(주로 디버깅 용도)
    • __add__: + 연산자를 오버로딩할 때 사용

    예를 들어, len() 호출 시 __len__ 메서드가 동작하는 것

추가 개념

  • 컨텍스트 매니저
    • 파일이나 데이터베이스 연결과 같은 자원을 안전하게 관리하는 데 사용됩니다. with 구문으로 구현된다.
  • 제너레이터
    • 메모리를 절약하면서 한 번에 하나의 값을 반환하는 함수입니다. yield 키워드를 사용한다.
  • 비동기 프로그래밍 (asyncawait)
    • 비동기 작업을 정의하는 async와 작업 완료를 기다리는 await 키워드를 사용해 동시성 코드를 작성한다.
    • 비동기는 작업을 시작한 후, 그 작업이 끝날 때까지 기다리지 않고 다른 작업을 계속 처리할 수 있도록 하는 프로그래밍 방식이다.
  • 가비지 컬렉션
    • 파이썬은 참조 카운트가 0이 된 객체를 자동으로 삭제하여 메모리를 회수한다.
  • 파이썬의 모듈과 패키지
    • 모듈은 코드 파일, 패키지는 모듈의 집합으로, 재사용 가능한 코드를 제공한다.
  • 파이썬의 예외 처리
    • try-except 블록을 사용해 에러를 처리하며, 필요 시 finally 블록을 사용해 정리 작업을 수행한다.

Advanced Python Concepts

  1. How are decorators used in Python programs?

    데코레이터는 함수 또는 메서드의 동작을 수정하는 함수입니다. 주로 로깅, 인증, 함수 출력 수정 등에 사용됩니다.

    def my_decorator(func):
        def wrapper():
            print("함수 실행 전 동작.")
            func()
            print("함수 실행 후 동작.")
        return wrapper
    
    @my_decorator
    def say_hello():
        print("안녕하세요!")
    
    say_hello()

    출력

    함수 실행 전 동작.
    안녕하세요!
    함수 실행 후 동작.

    데코레이터는 @ 문법을 사용하여 기존 함수 위에 레이어처럼 적용된다. 이를 통해 코드의 재사용성과 가독성을 높일 수 있다.

  2. How do Python generators work?
    제너레이터는 한 번에 하나의 값을 반환하는 함수로, 메모리 효율성이 뛰어나다. return 대신 yield 키워드를 사용한다.
    제너레이터는 값을 생성할 때만 실행되며, 대규모 데이터 처리가 필요한 작업에서 메모리를 효율적으로 사용할 수 있다. for 루프를 통해 자동으로 값을 소비할 수도 있다.

  3. What are context managers?

    컨텍스트 매니저는 파일 스트림이나 데이터베이스 연결 같은 자원을 적절히 관리하기 위해 사용된다. with 문을 통해 구현하며, 자원이 자동으로 닫히거나 해제된다.

    with 문을 사용하면 파일이 자동으로 닫히기 때문에, close() 메서드를 직접 호출할 필요가 없다. __enter____exit__ 메서드로 커스텀 컨텍스트 매니저를 만들 수 있다.

  4. How does Python manage memory?

    파이썬은 참조 카운팅과 가비지 컬렉션을 결합한 방식을 사용해 메모리를 자동으로 관리한다.

    • 불필요한 객체를 자동으로 해제하므로 개발자가 메모리 관리를 수동으로 처리할 필요가 없다.
  5. How does Python handle errors?
    파이썬은 try-except 블록을 사용하여 에러를 처리한다.

  • else: 예외가 발생하지 않은 경우 실행되는 블록.
  • finally: 예외 발생 여부와 관계없이 항상 실행되는 블록.
    일반적인 Exception을 처리하기보다 가능한 한 구체적인 예외를 처리하는 것이 좋음
  1. What are closures in Python?

    클로저는 내부 함수가 외부 함수의 변수를 참조하면서, 외부 함수 실행이 종료된 이후에도 해당 변수를 기억하는 기능이다.

    클로저는 상태를 유지해야 하는 상황에서 유용하며, 함수형 프로그래밍 패턴에서 자주 사용된다.


Python Libraries and Frameworks

  1. What is Django used for in Python?

    Django는 빠르고 안전하게 웹사이트를 개발할 수 있도록 도와주는 웹 프레임워크이다.

    • 데이터베이스 처리: ORM(Object-Relational Mapping)을 통해 데이터베이스와 상호작용.
    • 라우팅: URL과 뷰(view)를 연결.
    • 보안: CSRF 방지, SQL 인젝션 방지, 인증 및 권한 관리 등 강력한 보안 도구 제공.
  2. How does Flask differ from Django?

    • Flask:
      • 더 작고 단순한 프레임워크로, 필요한 도구를 직접 설정해야 함.
      • 유연성: 원하는 컴포넌트를 추가적으로 설치하여 커스터마이징 가능.
      • 경량 프로젝트: 소규모 또는 단순한 프로젝트에 적합.
    • Django:
      • 많은 내장 기능(예: 인증, 관리자 인터페이스)을 제공하여 즉시 사용 가능.
      • 대규모 웹 애플리케이션 개발에 적합하며, 설정보다는 관례를 우선시함.
  3. What is Pandas used for?

    Pandas는 데이터를 분석하고 조작하기 위한 라이브러리이다.

    • 데이터 조작: 테이블 형태의 데이터를 로드, 필터링, 집계.
    • 데이터 처리: 누락된 값 처리, 데이터 변환.
    • 데이터 시각화: 데이터를 쉽게 그래프로 표현.
  4. What is NumPy?

    • NumPy는 과학 계산과 수치 데이터를 처리하기 위한 라이브러리이다.
    • 주요 기능:
      • 배열 연산: 1차원, 2차원 배열을 포함한 다양한 배열 연산.
      • 수학 연산: 선형 대수, 통계 등 고급 연산.
      • 과학 및 수학 프로젝트: 배열 기반 데이터 처리를 효율적으로 수행.
  5. How do you work with external libraries in Python?
    외부 라이브러리는 pip를 통해 설치하고, 가상 환경을 사용하여 의존성을 관리할 수 있다.

추가 개념

  • 파이썬 생태계의 주요 라이브러리:
    • Scikit-learn: 머신러닝 라이브러리.
    • Matplotlib/Seaborn: 데이터 시각화 도구.
    • TensorFlow/PyTorch: 딥러닝 및 인공신경망 구현.
  • 가상 환경의 중요성:
    • 프로젝트별로 의존성을 격리하여 충돌 방지.
    • Python 버전이나 라이브러리 충돌 문제를 최소화.
  • Flask와 Django의 실제 사용 사례:
    • Flask: 빠르게 API를 만들거나 간단한 프로토타입을 개발할 때 유용.
    • Django: 대규모 애플리케이션 또는 데이터베이스 중심 프로젝트에 적합.

Error Handling and Debugging

  1. What is the difference between try-except and try-finally?
  • try-except:
    • try 블록에서 예외가 발생했을 때 이를 처리한다.

    • 특정 예외를 명시적으로 처리하거나, 모든 예외를 포괄적으로 처리할 수 있다.

      try:
          result = 10 / 0
      except ZeroDivisionError:
          print("0으로 나눌 수 없습니다!")
      0으로 나눌 수 없습니다!
  • try-finally:
    • 예외가 발생하든 발생하지 않든, finally 블록이 항상 실행된다.

    • 주로 리소스 정리(예: 파일 닫기, 연결 해제 등)에 사용된다.

      python
      코드 복사
      try:
          file = open('example.txt', 'r')
          content = file.read()
      finally:
          file.close()  # 항상 실행
  1. What are some common exceptions in Python?
    • IndexError: 리스트, 튜플의 범위를 벗어난 인덱스를 참조할 때.
    • KeyError: 딕셔너리에서 존재하지 않는 키를 참조할 때.
    • ValueError: 부적절한 값을 함수에 전달할 때.
    • TypeError: 잘못된 타입의 값을 연산하거나 함수에 전달할 때.
    • AttributeError: 객체에 없는 속성이나 메서드를 참조할 때.
  2. How do you debug a Python program?
    • pdb(Python Debugger):
      • 파이썬의 내장 디버거로, 실행 중 코드 상태를 분석하고 한 줄씩 실행해볼 수 있다.

        import pdb
        
        def buggy_function():
            x = 10
            pdb.set_trace()  # 디버깅 시작
            y = x / 0  # 에러 발생
            print(y)
        
        buggy_function()
      • 디버거 명령어:

        • n: 다음 줄로 이동.
        • c: 계속 실행.
        • q: 디버깅 종료.
    • IDE 디버거:
      • PyCharm, VS Code 같은 IDE는 시각적인 디버거를 제공한다.
      • 중단점(breakpoint)을 설정하고 변수 상태를 쉽게 확인할 수 있다.

File Handling and Data

  1. How do you open a file in Python?

    open() 함수를 사용하여 파일을 열고 작업을 수행한다.

    with open('example.txt', 'r') as file:
        content = file.read()
        print(content)
    • with 사용의 장점: 파일 작업이 끝난 후 자동으로 파일을 닫아준다.
  2. How do you work with CSV files in Python?

    import csv
    
    with open('example.csv', mode='r') as file:
        reader = csv.reader(file)
        for row in reader:
            print(row)

    pandas 라이브러리:

    • 대규모 데이터 처리에 적합하며, 데이터 분석 및 조작에 유용하다.
    import pandas as pd
    
    # CSV 파일 읽기
    df = pd.read_csv('example.csv')
    print(df.head())  # 데이터의 상위 5개 행 출력

Concurrency and Parallelism

  1. What is the Global Interpreter Lock (GIL) in Python?

    • GIL은 여러 스레드가 동시에 파이썬 코드를 실행하지 못하게 하는 메커니즘이다.
    • 주로 CPython 인터프리터에서 사용되며, CPU 바운드 작업에서는 멀티스레딩 성능을 제한한다.
    • 대신 I/O 바운드 작업에는 큰 영향을 주지 않는다.
    • GIL은 CPython의 메모리 관리와 쓰레드 안전성을 보장하기 위해 사용된다.
    • GIL의 영향을 피하기 위해 멀티프로세싱(multiprocessing)이나 비동기 프로그래밍을 활용할 수 있다.
  2. What is multithreading in Python?

    • 멀티스레딩은 여러 스레드를 동시에 실행하여 작업을 병렬로 처리하는 방식이다.
    • 파일 읽기/쓰기, 네트워크 요청 등 I/O 바운드 작업에 적합하다.
    • 보충 설명
      • I/O 바운드 작업: 네트워크 요청, 파일 읽기/쓰기 등.
      • CPU 바운드 작업: 데이터 처리, 수학 계산 등.
  3. What is the difference between multithreading and multiprocessing?

    특징멀티스레딩멀티프로세싱
    실행 단위여러 스레드여러 프로세스
    메모리스레드가 메모리를 공유각 프로세스가 독립적인 메모리 사용
    적합한 작업 유형I/O 바운드 작업CPU 바운드 작업
    GIL 영향 여부영향을 받음영향을 받지 않음
    • 보충 설명:
      • I/O 바운드 작업: 네트워크 요청, 파일 읽기/쓰기 등.
      • CPU 바운드 작업: 데이터 처리, 수학 계산 등.
  4. How do you achieve concurrency in Python?

    • threading:
      • 멀티스레딩을 통해 I/O 바운드 작업 처리.
    • multiprocessing:
      • 멀티프로세싱으로 CPU 바운드 작업 처리.
    • asyncio:
      • 비동기 라이브러리로 I/O 작업을 비차단(non-blocking) 방식으로 실행.
  5. What is asyncio, and how is it used?

    • asyncio는 비동기 I/O 작업을 처리하는 라이브러리이다.
    • 이벤트 루프(event loop)를 사용하여 작업을 스케줄링하고 동시 실행한다.
  6. How do async and await work in Python?

    • async: 비동기 함수를 정의할 때 사용.
    • await: 비동기 작업이 완료될 때까지 기다릴 때 사용.
    • 비동기 함수는 항상 async def로 선언하며, 반환 값은 코루틴(coroutine)이다.
    • 비동기 함수 호출은 이벤트 루프를 통해 실행된다.

Databases in Python

  1. How does Python interact with databases?
  • 파이썬은 SQLite, MySQL, PostgreSQL 같은 데이터베이스에 연결하기 위해 다양한 라이브러리를 사용한다.
  • SQL 명령을 작성해 데이터베이스를 쿼리하거나 수정할 수 있다.
    import sqlite3
    
    # SQLite 데이터베이스 연결
    conn = sqlite3.connect('example.db')
    cursor = conn.cursor()
    
    # 테이블 생성 및 데이터 삽입
    cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT)")
    cursor.execute("INSERT INTO users (id, name) VALUES (?, ?)", (1, 'Alice'))
    
    conn.commit()
    conn.close()
  1. What is SQLAlchemy?

    • SQLAlchemy는 파이썬용 ORM(Object-Relational Mapping) 라이브러리이다.
    • SQL 대신 파이썬 클래스를 사용해 데이터베이스와 상호작용할 수 있다.
  2. How would you use a database with Django?

    • Django는 내장 ORM을 통해 데이터베이스를 관리한다.
    • 모델을 정의하면 Django가 데이터베이스 테이블을 생성하고, 데이터를 자동으로 처리한다.

추가 개념

  • 동시성과 병렬성의 차이:
    • 동시성(Concurrency): 여러 작업이 한 번에 진행되는 것처럼 보이는 방식.
    • 병렬성(Parallelism): 여러 작업이 실제로 동시에 실행되는 방식.
  • 데이터베이스 관련 라이브러리:
    • SQLite: 경량 데이터베이스로, 파이썬 표준 라이브러리에서 제공.
    • Psycopg2: PostgreSQL용 드라이버.
    • MySQL Connector: MySQL 데이터베이스와 상호작용.
  • Django와 SQLAlchemy 비교:
    • Django는 프레임워크 내에 ORM이 통합되어 있어 설정과 사용이 간단.
    • SQLAlchemy는 독립형 ORM으로 유연성과 커스터마이징이 가능.

Testing in Python

  1. What is unittest in Python?
    unittest는 파이썬 표준 라이브러리로 포함된 테스트 프레임워크이다.
    테스트 케이스를 작성하고 실행하여 코드가 예상대로 작동하는지 확인한다.
  2. What is the use of a Data Provider in TestNG?
    • TestNG는 Java에서 사용되는 테스트 프레임워크로, Data Provider는 테스트 메서드를 다양한 데이터 세트로 여러 번 실행할 수 있게 한다.
    • 파이썬에서는 유사한 개념으로 parameterizedpytest.mark.parametrize를 사용할 수 있다.
  3. What is Pytest?
    • Pytest는 파이썬에서 널리 사용되는 테스트 프레임워크로, 간결한 문법과 확장 가능한 기능을 제공한다.
    • 플러그인을 추가하여 기능을 확장할 수 있다(예: pytest-cov를 사용한 코드 커버리지 측정).

Python in Real-World Projects

  1. How do you use Python for web scraping?

    BeautifulSoup, Scrapy와 같은 라이브러리를 사용해 웹에서 데이터를 추출한다.

  2. How is Python used in machine learning?

    TensorFlow, Keras, Scikit-learn과 같은 라이브러리를 사용해 머신러닝 모델을 생성하고 학습시킨다.

  3. How does Python integrate with cloud platforms?

    AWS, Google Cloud, Azure와 같은 플랫폼의 SDK를 사용하여 클라우드 자원을 관리하거나 자동화 작업을 수행한다.


Security in Python

  1. How do you secure a web application in Python?

    Django의 내장 보안 기능을 사용하여 CSRF 방지, SQL 인젝션 방지, HTTPS 지원 등을 설정할 수 있다.

  2. What is input validation in Python?

    잘못된 데이터나 악의적인 입력을 방지하기 위해 데이터 타입, 형식, 범위를 검증한다.


Performance Optimization in Python

  1. How do you optimize the performance of a Python program?
    • 방법:
      • 리스트 컴프리헨션: 반복문을 대체하여 코드 간결화 및 속도 향상.
      • Cython: 파이썬 코드를 C로 컴파일하여 속도 향상.
      • 멀티프로세싱: CPU 바운드 작업에서 병렬 처리로 속도 개선.
      • 메모리 프로파일링: memory_profiler 라이브러리로 메모리 사용량 분석.
  2. How does GIL affect multithreading?
    • 설명:
      • GIL은 여러 스레드가 동시에 파이썬 코드를 실행하지 못하도록 제한하여 멀티스레딩이 비효율적으로 작동할 수 있습니다.
      • 해결책:
        • 멀티프로세싱 사용: 프로세스마다 별도의 GIL을 할당.
        • 비동기 프로그래밍 사용: I/O 바운드 작업 최적화.
profile
Tistory로 이사갔어요

0개의 댓글