🧩 함수형 프로그래밍

  • 순수 함수불변성을 중심으로 부수 효과를 최소화하는 프로그래밍 패러다임입니다.
  • Python에서도 주요 기능을 지원합니다.

✨ 특징

  • 순수 함수: 동일 입력 → 항상 동일 출력. 외부에 영향을 주지 않습니다.
  • 불변 데이터: 데이터는 한 번 만들면 변경이 불가능합니다.
  • 고차 함수: 함수를 인자로 받거나 결과로 반환합니다. (e.g., map, filter)
  • 지연 평가(Lazy Evaluation): 필요할 때까지 계산을 미룹니다. (e.g., 제너레이터)

📝 List Comprehension

  • 기존 리스트로 새 리스트를 쉽고 빠르게 만드는 문법입니다.
  • for문과 append를 쓰는 것보다 메모리, 속도 면에서 더 효율적입니다.
# 기본 구조
new_list = [수식 for 변수 in 반복가능객체 if 조건]

🛠️ 주요 내장 함수

  • map(func, iter): 모든 요소에 함수를 일괄 적용합니다. 결과는 이터레이터라 메모리 효율이 좋습니다.
  • filter(func, iter): 조건 함수가 True인 요소만 걸러서 반환합니다.
  • enumerate(iter): 순회할 때 인덱스와 값을 튜플로 같이 넘겨줍니다. start=1처럼 시작값 지정이 가능합니다.
  • zip(iter1, iter2): 여러 리스트를 같은 인덱스끼리 튜플로 묶어줍니다. 가장 짧은 리스트를 기준으로 합니다.
  • reduce(func, iter): 모든 요소를 누적 계산해 하나의 값으로 축약합니다. functools 라이브러리에 있습니다.

⚡ Generator

  • yield를 사용해 필요할 때마다 값을 하나씩 생성하는 함수입니다.
  • 전체 데이터를 메모리에 한 번에 올리지 않으므로 대용량 데이터 처리에 매우 효율적입니다. (지연 평가 방식)
def generate_squares(n):
    for i in range(n):
        yield i * i  # 이 부분에서 멈췄다가 다음에 다시 호출되면 이어서 실행

squares = generate_squares(5)
print(next(squares))  # 0
print(next(squares))  # 1

📂 파일 입출력

  • with open(...) as f: 구문을 쓰는 것이 정석입니다. 블록이 끝나면 파일이 자동으로 닫힙니다.
  • 파일 모드: r(읽기), w(쓰기, 덮어씀), a(추가), rb(바이너리 읽기) 등이 있습니다.
  • 읽기: f.read()(전체), f.readline()(한 줄), f.readlines()(모든 줄을 리스트로).
  • 쓰기: f.write('내용'), f.writelines(['줄1\n', '줄2\n]).

💬 문자열 다루기

구분 메서드 설명
대소문자 upper(), lower(), capitalize(), title() 전체/부분 대소문자 변경
검색/개수 find(), count(), startswith(), endswith() 특정 문자열 찾기, 개수 세기, 시작/끝 확인
변경/정리 replace(), strip(), lstrip(), rstrip() 문자열 교체, 양쪽/왼쪽/오른쪽 공백 제거
분리/결합 split(), join() 특정 기준으로 문자열 나누기 / 리스트를 문자열로 합치기
판단 isalpha(), isdigit(), isalnum() 문자인지, 숫자인지, 문자+숫자인지 확인

📦 Collections 모듈

  • 파이썬 내장 자료형을 확장한 특수 컨테이너를 제공합니다.
  • Counter: 요소의 개수를 딕셔너리 형태로 세 줍니다. most_common()으로 빈도수 높은 값을 확인할 수 있습니다.
  • deque: 양쪽 끝에서 빠르게 추가/삭제(append, pop)가 가능합니다. 스택, 큐 구현에 최적입니다.
  • defaultdict: 키가 없을 때 미리 지정한 기본값을 반환해줘서 KeyError를 방지합니다.
  • namedtuple: 튜플의 각 자리에 이름을 붙여줘서 인덱스 대신 이름으로 접근할 수 있습니다. 코드 가독성을 향상시킵니다.

🔍 정규식(re) 모듈

  • 복잡한 규칙을 가진 문자열 패턴을 찾거나, 바꾸거나, 나눌 때 사용합니다.
  • 주요 함수:
    • re.match(): 문자열 처음부터 패턴이 맞는지 확인합니다.
    • re.search(): 문자열 전체에서 패턴과 일치하는 첫 부분을 찾습니다.
    • re.findall(): 패턴과 일치하는 모든 부분을 리스트로 반환합니다.
    • re.sub(): 패턴과 일치하는 부분을 다른 문자열로 교체합니다.
  • 꿀팁: 정규식 테스트는 https://regex101.com/ 에서 할 수 있습니다.