Hello World 출력
Python에서 가장 첫 번째로 배우는 Hello World. 별도의 main 함수나 클래스 없이 한 줄로 실행됩니다.
STATIC LEARNING LIBRARY
200개 예제를 개별 HTML 문서로 제공합니다. 검색엔진과 공유 링크에서 각 주제를 바로 열 수 있습니다.
Python
Python에서 가장 첫 번째로 배우는 Hello World. 별도의 main 함수나 클래스 없이 한 줄로 실행됩니다.
Python 스크립트를 모듈로도, 직접 실행도 가능하게 만드는 관용구.
Python 프로젝트마다 독립된 패키지 환경을 만드는 venv 모듈 사용법입니다. 시스템 Python을 오염시키지 않고 프로젝트별 의존성을 관리할 수 있습니다.
Python의 패키지 관리자 pip를 사용하여 외부 라이브러리를 설치하고 requirements.txt로 의존성을 관리합니다.
Python 프로젝트의 표준 디렉터리 구조를 이해하면 유지보수와 배포가 쉬워집니다. src/ 레이아웃이 현대적 표준입니다.
Python
Python의 동적 타이핑과 Python 3.5+의 타입 힌트(Type Hints)로 코드 안정성을 높입니다.
Python의 강력한 문자열 처리. f-string, 메서드 체이닝, 슬라이싱을 완전히 익힙니다.
Python의 if/elif/else, for, while 문법과 else 절.
Python의 가장 Pythonic한 기법. 간결하고 빠른 컬렉션 생성.
구조적 패턴 매칭. 단순 switch 이상의 강력한 패턴 분해를 제공합니다.
Python 3.8+ 대입 표현식(:=)으로 중복 계산을 제거합니다.
Python의 속성 접근 메커니즘을 제어하는 디스크립터 프로토콜.
type X = ... 문법으로 타입 별칭과 제네릭 정의
구조적 패턴 매칭은 값, 타입, 구조를 한 번에 분해하고 매칭합니다. 단순 switch-case를 넘어 중첩 객체, 시퀀스, 매핑 등 복잡한 데이터 구조를 우아하게 처리할 수 있습니다.
Python 슬라이싱의 고급 기법으로 step 파라미터, 음수 인덱스, 다차원 슬라이싱까지 다룹니다.
자주 쓰이는 문자열 메서드를 정리합니다. str은 불변(immutable)이므로 항상 새 문자열을 반환합니다.
f-string과 format()을 사용한 숫자 포맷팅 기법입니다. 천 단위 구분, 소수점 자릿수, 퍼센트 등을 다룹니다.
datetime 모듈로 날짜와 시간을 다루는 기본 방법입니다. 생성, 포맷, 연산을 포함합니다.
Enum으로 관련된 상수를 그룹화하여 타입 안전성과 가독성을 높입니다.
Python 3.10+의 TypeAlias와 3.12+의 type 문으로 복잡한 타입에 별칭을 부여합니다.
TypeVar로 제네릭 함수와 클래스를 만들어 타입 안전한 코드를 작성합니다.
Literal로 함수 인자에 허용되는 구체적인 값을 제한하여 타입 안전성을 높입니다.
Final로 재할당 불가 변수를 선언하여 실수로 값이 변경되는 것을 방지합니다.
Python 3.10+의 | 연산자로 여러 타입을 허용하는 유니온 타입을 간결하게 표현합니다.
Python 3.8+의 := (바다코끼리) 연산자로 표현식 안에서 변수에 값을 할당합니다.
f-string의 고급 기능으로 표현식, 포맷 스펙, 디버깅 출력, 중첩 등을 다룹니다.
*와 ** 언패킹의 고급 활용법입니다. 변수 할당, 함수 호출, 병합에 사용됩니다.
딕셔너리의 고급 메서드와 패턴을 다룹니다. setdefault, get, 딕셔너리 뷰 등을 포함합니다.
set의 집합 연산으로 교집합, 합집합, 차집합, 대칭차를 효율적으로 수행합니다.
frozenset은 변경 불가능한 세트로, 딕셔너리 키나 다른 세트의 원소로 사용할 수 있습니다.
namedtuple로 필드명이 있는 불변 튜플을 만들어 코드 가독성을 높입니다.
Counter로 요소의 빈도를 세고, 가장 많이 등장하는 항목을 찾습니다.
defaultdict는 존재하지 않는 키에 접근할 때 자동으로 기본값을 생성합니다.
OrderedDict는 삽입 순서를 보장하며, 순서 관련 추가 기능을 제공합니다. Python 3.7+에서 일반 dict도 순서를 보장하지만 차이점이 있습니다.
Python
가변 인자와 키워드 인자로 유연한 함수를 설계합니다.
데코레이터로 횡단 관심사(로깅, 캐싱, 인증 등)를 분리합니다.
클로저로 상태를 캡처하고, yield로 메모리 효율적인 이터레이터를 만듭니다.
Pydantic + FastAPI로 타입 안전한 REST API 빠르게 구축
클로저(closure)는 외부 함수의 변수를 기억하는 내부 함수입니다. 상태를 캡슐화하는 강력한 패턴입니다.
functools.partial로 함수의 일부 인자를 고정하여 새로운 함수를 만듭니다.
functools.lru_cache로 함수 결과를 캐싱하여 중복 계산을 방지합니다. 재귀 함수 성능을 극적으로 향상시킵니다.
인자를 받는 데코레이터는 3단 중첩 함수로 구현합니다. 실행 횟수 제한, 권한 검사 등에 활용됩니다.
여러 데코레이터를 조합하여 함수에 다중 관심사를 분리 적용합니다. 실행 순서를 이해하는 것이 핵심입니다.
Python의 재귀 깊이 제한과 이를 다루는 방법입니다. 기본 한계는 1000이며 스택 오버플로를 방지합니다.
Python은 꼬리 재귀 최적화를 지원하지 않지만, 데코레이터로 비슷한 효과를 구현할 수 있습니다.
제너레이터의 send(), throw(), close() 메서드로 양방향 통신을 구현합니다.
제너레이터 기반 코루틴으로 협력적 멀티태스킹을 구현합니다. async/await의 기반이 되는 개념입니다.
yield from으로 하위 제너레이터에 위임하여 제너레이터 체이닝을 간결하게 합니다.
함수 어노테이션으로 매개변수와 반환값의 타입을 명시하고, 런타임에서 검사하는 방법입니다.
__call__ 메서드를 구현하여 인스턴스를 함수처럼 호출할 수 있게 만듭니다.
functools.singledispatch로 인자 타입에 따라 다른 구현을 실행하는 함수 오버로딩을 구현합니다.
여러 함수를 순차적으로 연결하여 데이터 변환 파이프라인을 구성합니다.
함수들을 파이프라인으로 연결하여 데이터를 순차적으로 처리하는 함수형 패턴입니다.
Python
Python OOP의 핵심. __init__, @property, @classmethod, @staticmethod.
@dataclass로 보일러플레이트를 제거하고, 매직 메서드로 연산자를 오버로드합니다.
다형성을 구현하는 세 가지 방법: 상속, 추상 기반 클래스(ABC), 구조적 서브타이핑(Protocol).
클래스 생성 과정을 제어하는 메타클래스와 더 간단한 대안을 배웁니다.
@model_validator, @field_validator로 강력한 데이터 검증
메타클래스는 "클래스의 클래스"로, 클래스 생성 과정을 커스터마이즈합니다. type을 상속하여 __new__나 __init_subclass__를 오버라이드하면 클래스 생성 시 자동 검증, 등록, 변형이 가능합니다.
typing.Protocol은 Go의 인터페이스처럼 구조적 서브타이핑(덕 타이핑의 정적 버전)을 지원합니다. 클래스가 명시적으로 상속하지 않아도, 필요한 메서드와 속성만 가지면 해당 프로토콜을 만족합니다.
Python의 다중 상속에서 메서드 호출 순서(MRO)는 C3 선형화 알고리즘으로 결정됩니다.
abc 모듈로 추상 클래스를 정의하여 하위 클래스에 메서드 구현을 강제합니다.
@property로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.
디스크립터 프로토콜(__get__, __set__, __delete__)로 속성 접근을 완전히 커스터마이징합니다.
__init_subclass__로 클래스가 상속될 때 자동으로 실행되는 로직을 정의합니다. 메타클래스보다 간단합니다.
클래스에 데코레이터를 적용하여 메서드 추가, 유효성 검사, 싱글톤 등 횡단 관심사를 처리합니다.
dataclass의 field(), __post_init__, 상속 등 고급 기능을 다룹니다.
Enum의 고급 기능: 메서드 추가, Flag, 커스텀 값, 멤버 검증 등을 다룹니다.
믹스인은 다중 상속으로 클래스에 특정 기능을 추가하는 패턴입니다. 단일 책임 원칙을 유지하면서 기능을 조합합니다.
클래스 메서드를 활용한 팩토리 패턴으로 다양한 방법으로 객체를 생성합니다.
싱글톤 패턴으로 클래스의 인스턴스를 하나만 존재하게 보장합니다. Python에서의 다양한 구현 방법을 비교합니다.
옵저버 패턴으로 객체 상태 변경 시 관련 객체들에게 자동으로 알림을 보냅니다.
전략 패턴으로 알고리즘을 캡슐화하고 런타임에 교체할 수 있게 합니다. Python에서는 함수를 전략으로 사용할 수 있습니다.
상태 패턴으로 객체의 내부 상태에 따라 행동을 변경합니다. 복잡한 조건문을 상태 객체로 대체합니다.
Protocol로 구조적 서브타이핑(덕 타이핑)을 타입 시스템에서 지원합니다. 상속 없이 인터페이스를 정의합니다.
Python
Python에서 가장 많이 쓰는 자료구조. 생성, 조작, 컴프리헨션, 병합까지.
표준 라이브러리의 강력한 컬렉션 타입을 활용합니다.
requests 대체, async with AsyncClient 패턴
itertools의 chain, product, permutations 등으로 효율적인 이터레이션을 수행합니다.
collections.abc로 커스텀 컬렉션이 올바른 인터페이스를 구현하는지 보장합니다.
매직 메서드를 구현하여 내장 컬렉션처럼 동작하는 커스텀 컨테이너를 만듭니다.
중첩 루프, 조건부 표현식, walrus 연산자를 활용한 고급 리스트 컴프리헨션 패턴입니다.
딕셔너리 컴프리헨션으로 딕셔너리를 간결하게 생성하고 변환합니다.
제너레이터 표현식으로 메모리 효율적인 지연 평가 이터레이터를 만듭니다.
heapq로 우선순위 큐를 구현합니다. 최솟값/최댓값을 O(log n)에 추출합니다.
bisect로 정렬된 리스트에서 이진 검색과 삽입을 O(log n)에 수행합니다.
deque는 양끝에서 O(1)으로 삽입/삭제가 가능한 양방향 큐입니다.
ChainMap으로 여러 딕셔너리를 하나로 연결하여 계층적 설정을 관리합니다.
Python에서 불변 컬렉션을 활용하여 안전한 데이터 구조를 만드는 방법입니다.
Python의 sorted()와 list.sort()의 고급 사용법과 커스텀 정렬 기법입니다.
이진 검색 알고리즘을 직접 구현하고 bisect과 비교합니다.
Python으로 트리와 그래프 자료구조를 구현하고 순회하는 방법입니다.
Python dict의 기반인 해시 테이블을 직접 구현하여 내부 동작 원리를 이해합니다.
Python
functools 모듈로 함수형 프로그래밍 패턴을 구현합니다.
pandas보다 10~100배 빠른 Polars 기초 사용법
함수형 프로그래밍의 기본 도구인 map, filter, reduce를 활용합니다.
operator 모듈로 연산자를 함수로 사용하여 lambda 사용을 줄입니다.
toolz 라이브러리의 핵심 함수를 순수 Python으로 구현하여 함수형 프로그래밍 도구를 이해합니다.
모나드 패턴으로 None 체크, 에러 처리 등을 체이닝 가능한 형태로 추상화합니다.
frozen=True 데이터클래스와 함수형 업데이트 패턴으로 불변 데이터를 다룹니다.
Python 3.10+의 구조적 패턴 매칭(match/case)의 고급 패턴을 다룹니다.
커링(currying)으로 다인자 함수를 단일 인자 함수 체인으로 변환합니다.
여러 함수를 합성하여 새로운 함수를 만드는 함수형 프로그래밍 기법입니다.
순수 함수(pure function)의 원칙과 Python에서 실천하는 방법입니다. 동일 입력에 항상 같은 출력을 보장합니다.
함수형 프로그래밍에서 사이드이펙트를 격리하고 관리하는 패턴입니다.
Python
Python의 비동기 I/O 라이브러리. 코루틴으로 I/O 대기 시간을 효율적으로 활용합니다.
async with와 async for로 비동기 리소스를 안전하게 관리합니다.
비동기 큐와 세마포어로 동시성을 제어하고 프로듀서-컨슈머 패턴을 구현합니다.
pip/poetry를 대체하는 Rust 기반 고속 패키지 매니저
GIL 때문에 CPU 바운드 작업은 threading으로 병렬화되지 않습니다. multiprocessing이나 concurrent.futures.ProcessPoolExecutor를 사용하면 멀티코어를 활용한 진정한 병렬 처리가 가능합니다.
asyncio 이벤트 루프의 기본 개념과 실행 방법을 이해합니다.
async/await의 고급 패턴: 에러 처리, 타임아웃, 동시 실행 제어를 다룹니다.
async for와 비동기 제너레이터로 비동기 스트림 데이터를 처리합니다.
async with로 비동기 리소스의 획득과 해제를 안전하게 관리합니다.
aiohttp로 비동기 HTTP 클라이언트를 구현하여 동시에 여러 요청을 처리합니다.
파일 I/O를 비동기로 처리하여 이벤트 루프를 블로킹하지 않는 방법입니다.
asyncio.Queue로 생산자-소비자 패턴을 비동기로 구현합니다.
asyncio.Semaphore로 동시 실행 수를 제한하여 리소스를 보호합니다.
__aiter__와 __anext__로 비동기 이터레이터 프로토콜을 구현합니다.
asyncio.TaskGroup으로 구조적 동시성을 구현하여 태스크 라이프사이클을 안전하게 관리합니다.
trio는 구조적 동시성을 핵심 원칙으로 하는 비동기 라이브러리입니다. asyncio의 대안으로 사용됩니다.
pytest-asyncio를 사용하여 비동기 코드를 테스트하는 방법입니다.
비동기 코드의 일반적인 문제를 진단하고 디버깅하는 기법입니다.
fan-out/fan-in 패턴으로 작업을 분산하고 결과를 수집합니다.
기존 동기 코드를 비동기로 전환하는 실용적인 패턴과 전략입니다.
Python
Python의 예외 계층과 올바른 예외 처리 패턴.
중첩 f-string, 이스케이프 문자 허용 등 개선 사항
raise ... from으로 예외를 체이닝하여 원인과 결과를 명확히 연결합니다.
ExceptionGroup으로 여러 예외를 동시에 처리합니다. except* 구문과 함께 사용됩니다.
프로젝트별 예외 계층을 설계하여 체계적인 에러 처리를 구현합니다.
컨텍스트 매니저에서 예외를 잡고, 변환하고, 억제하는 패턴입니다.
warnings로 경고를 발생시키고 관리합니다. 에러와 달리 프로그램을 중단하지 않습니다.
assert문으로 프로그램의 내부 불변조건(invariant)을 검증합니다.
logging 모듈로 구조화된 로그를 출력하여 디버깅과 모니터링을 수행합니다.
traceback 모듈로 예외의 스택 트레이스를 프로그래밍적으로 분석하고 포맷합니다.
실패할 수 있는 작업에 재시도 로직을 적용하는 패턴입니다. 지수 백오프와 조건부 재시도를 다룹니다.
시그널 핸들링으로 프로그램을 안전하게 종료하고 리소스를 정리합니다.
Python
pathlib으로 경로를 객체지향적으로 처리하고 파일을 안전하게 읽고 씁니다.
실무에서 자주 쓰는 데이터 포맷 처리와 환경 변수 관리.
PEP 621 표준인 pyproject.toml은 setup.py를 대체하는 선언적 패키지 설정 파일입니다. 빌드 시스템, 의존성, 메타데이터를 하나의 파일에 정의하며, pip, poetry, hatch 등 모든 도구가 지원합니다.
pathlib의 고급 기능으로 경로 조작, 파일 검색, 메타데이터 접근을 수행합니다.
메모리를 효율적으로 사용하며 대용량 파일을 읽고 처리하는 기법입니다.
csv 모듈과 openpyxl로 CSV와 Excel 파일을 다루는 방법입니다.
json 모듈로 JSON 데이터를 파싱하고 직렬화합니다. 커스텀 인코더/디코더도 다룹니다.
sqlite3으로 경량 데이터베이스를 사용합니다. 별도 설치 없이 Python에 내장되어 있습니다.
HTTP 클라이언트로 외부 API를 호출하고 응답을 처리합니다.
HTML 파싱과 데이터 추출의 기본 패턴입니다. BeautifulSoup의 주요 셀렉터를 다룹니다.
파일 시스템 변경을 감지하여 자동 작업을 수행하는 패턴입니다.
Python으로 ZIP, GZIP 등 압축 파일을 생성하고 해제합니다.
tempfile로 안전한 임시 파일과 디렉터리를 생성하고 자동 정리합니다.
Python
Python 최고의 테스트 프레임워크 pytest로 효율적인 테스트를 작성합니다.
unittest.mock으로 외부 의존성을 격리하고 비동기 코드를 테스트합니다.
랜덤 입력으로 엣지 케이스를 자동 탐색하는 테스트
pytest의 고급 기능: 마커, 플러그인, 설정, 실행 옵션을 다룹니다.
pytest fixture로 테스트 전후 설정과 정리를 구조화합니다.
@pytest.mark.parametrize로 여러 입력값에 대해 같은 테스트를 반복 실행합니다.
unittest.mock으로 외부 의존성을 대체하여 단위 테스트를 격리합니다.
여러 컴포넌트의 상호작용을 검증하는 통합 테스트 패턴입니다.
hypothesis 라이브러리로 무작위 입력을 자동 생성하여 속성(property)을 검증합니다.
행동 주도 개발(BDD)으로 비즈니스 요구사항을 실행 가능한 테스트로 작성합니다.
테스트 커버리지를 측정하고 분석하여 테스트되지 않은 코드를 찾습니다.
코드의 성능을 체계적으로 측정하고 회귀를 감지하는 벤치마크 테스트입니다.
스냅샷 테스트로 복잡한 출력을 저장하고 변경 여부를 자동 감지합니다.
뮤테이션 테스트로 테스트 스위트의 품질을 검증합니다. 코드를 의도적으로 변경하여 테스트가 실패하는지 확인합니다.
GitHub Actions 등 CI/CD 파이프라인에서 테스트를 자동화하는 설정입니다.
Python
타입 힌트로 코드 품질과 IDE 지원을 극대화합니다.
contextlib로 리소스를 안전하게 관리하고, __slots__로 메모리를 최적화합니다.
표준 라이브러리 itertools로 메모리 효율적인 데이터 처리를 구현합니다.
메모리 최적화 전략 비교: slots vs namedtuple vs dataclass
__slots__를 선언하면 인스턴스마다 __dict__를 생성하지 않아 메모리를 크게 절약합니다. 수백만 개의 객체를 다루는 데이터 처리나 과학 계산에서 효과적입니다.
cProfile로 함수별 실행 시간을 측정하여 성능 병목을 찾습니다.
메모리 사용량을 측정하고 메모리 누수를 찾는 방법입니다.
리스트와 제너레이터의 메모리/속도 트레이드오프를 비교합니다.
numpy의 벡터화 연산으로 루프 대비 100배 이상 빠른 수치 계산을 수행합니다.
Cython으로 Python 코드를 C로 컴파일하여 성능을 극적으로 향상시키는 방법의 개요입니다.
multiprocessing으로 CPU 바운드 작업을 여러 프로세스에 분산하여 GIL을 우회합니다.
다양한 캐싱 전략으로 반복 계산을 제거하고 응답 속도를 향상시킵니다.
N+1 문제, 인덱싱, 배치 처리 등 데이터베이스 성능 최적화 패턴입니다.
비동기 프로그래밍의 성능 특성을 이해하고 I/O 바운드 작업을 최적화합니다.
PyPy는 JIT 컴파일러를 내장한 Python 인터프리터로, CPython 대비 수배~수십배 빠른 성능을 제공합니다.
Python
의존성 주입 패턴과 contextvars로 스레드/코루틴 안전한 컨텍스트를 관리합니다.
느슨한 결합(loose coupling)과 확장성 있는 플러그인 아키텍처를 구현합니다.
여러 예외를 동시에 처리하는 except* 패턴
with 문은 리소스의 획득과 해제를 자동으로 관리합니다. __enter__와 __exit__ 매직 메서드를 구현하거나, contextlib.contextmanager 데코레이터로 간단히 만들 수 있습니다.
Pydantic은 Python 타입 힌트를 활용해 런타임 데이터 검증을 자동화합니다. API 요청/응답, 설정 파일, 외부 데이터 파싱에서 타입 안전성을 보장하며, FastAPI의 핵심 기반 라이브러리입니다.
Model-View-Controller(MVC)와 Django의 Model-Template-View(MTV) 패턴을 Python으로 구현합니다.
리포지토리 패턴으로 데이터 접근 로직을 추상화하여 비즈니스 로직과 분리합니다.
서비스 계층으로 비즈니스 로직을 캡슐화하여 컨트롤러와 데이터 접근을 분리합니다.
의존성 주입(DI)으로 모듈 간 결합도를 낮추고 테스트 용이성을 높입니다.
이벤트 기반 아키텍처로 컴포넌트 간 느슨한 결합을 구현합니다.
발행/구독 패턴으로 메시지 기반의 비동기 통신을 구현합니다.
커맨드 패턴으로 요청을 객체로 캡슐화하여 실행, 취소, 재실행을 지원합니다.
객체에 동적으로 기능을 추가하는 데코레이터 패턴입니다. Python 데코레이터와는 다른 GoF 패턴입니다.
프록시 패턴으로 객체 접근을 제어하고 지연 로딩, 캐싱, 접근 제어를 구현합니다.
어댑터 패턴으로 호환되지 않는 인터페이스를 연결하여 기존 코드를 재사용합니다.
파사드 패턴으로 복잡한 서브시스템을 간단한 인터페이스 뒤에 숨깁니다.
템플릿 메서드 패턴으로 알고리즘의 골격을 정의하고 세부 단계를 서브클래스에서 구현합니다.
빌더 패턴으로 복잡한 객체를 단계별로 구성합니다. 메서드 체이닝으로 가독성을 높입니다.
전략 패턴으로 가격 할인 정책 같은 비즈니스 규칙을 교체 가능하게 설계합니다.
플러그인 시스템으로 애플리케이션을 확장 가능하게 설계합니다.