7. 파이썬 날아오르기
7-1. 파이썬과 유니코드
📌 파이썬과 유니코드 요약표
| 구분 | 설명 | 예시 |
| 유니코드 (Unicode) |
전 세계 모든 문자를 통일된 방식으로 표현하는 문자 체계 | 한글, 영어, 일본어 등 모두 하나의 체계로 표현 가능 |
| 파이썬 v.3 문자열 | 기본적으로 유니코드로 처리됨 (str) | s = "안녕" |
| 바이트 (bytes) | 컴퓨터가 처리하는 인코딩된 이진 데이터 | b = s.encode("utf-8") |
| 인코딩 (encoding) |
문자열 → 바이트로 변환 | s.encode("utf-8") → b'\xec\x95\x88\xeb\x85\x95' |
| 디코딩 (decoding) |
바이트 → 문자열로 변환 | b.decode("utf-8") → "안녕" |
| 대표 인코딩 방식 | UTF-8, UTF-16, UTF-32 등 | UTF-8이 가장 일반적 |
| 인코딩/디코딩 에러 | 인코딩 방식이 서로 다르면 오류 발생 | euc-kr로 인코딩한 데이터를 utf-8로 디코딩하면 ❌ |
| 문자열 타입 확인 | 문자열: str, 바이트: bytes | type("안녕") → <class 'str'>, type(b"hi") → <class 'bytes'> |
.TIP
| 코드 | 설명 |
| s = "파이썬" | 유니코드 문자열 |
| b = s.encode("utf-8") | UTF-8 인코딩 |
| s2 = b.decode("utf-8") | UTF-8 디코딩 (문자 복원) |
7-2. 클로저와 데코레이터
| 개념 | 정의 |
| 클로저 (Closure) |
"함수 안에 정의된 함수"가 자신을 감싼 함수의 변수값을 기억하고 사용하는 구조 외부 함수의 변수를 기억하는 내부 함수 |
| 데코레이터 (Decorator) |
기존 함수를 수정하지 않고 기능을 추가하는 함수. 보통 클로저 구조 |
📌 클로저 개념 요약표
| 구분 | 설명 | 예시 |
| 내부 함수 | 함수 안에 정의된 또 다른 함수 | def outer(): ... def inner(): ... |
| 자신을 감싼 함수의 변수 사용 |
외부 함수의 지역 변수를 내부 함수가 참조 | 외부 함수 종료 후에도 변수 유지 |
| 클로저가 되는 조건 | ① 함수 안에 함수가 있어야 함 ② 내부 함수가 외부 함수의 변수를 사용해야 함 ③ 외부 함수가 내부 함수를 반환해야 함 |
![]() |
📌 데코레이터 개념 요약표
| 구분 | 설명 | 예시 |
| 데코레이터 함수 | 다른 함수를 감싸서 기능을 확장하는 함수 | def decorator(func): |
| @ 문법 | 데코레이터를 적용할 때 사용 | @decorator |
| 기존 함수 수정 없이 확장 가능 | 로깅, 시간 측정, 권한 체크 등 | @time_checker, @auth_required 등 |
| 내부에 클로저 구조 사용 | 데코레이터도 함수 안에 함수가 있음 def wrapper(*args): 등 |
![]() |
7-3. 이터레이터와 제너레이터
| 개념 | 정의 |
| 이터레이터 (Iterator) |
반복 가능한 객체(iterable)를 하나씩 꺼내주는 역할을 하는 객체 next()로 하나씩 꺼낼 수 있는 객체 |
| 제너레이터 (Generator) |
이터레이터를 생성해주는 특별한 함수 yield 키워드를 사용해 값을 하나씩 순차적으로 반환 제너레이터는 다음과 같은 상황에서 매우 유용
|
📌 이터레이터 관련 용어 정리
| 용어 | 설명 | 예시 |
| iterable | 반복 가능한 객체 | 리스트, 튜플, 문자열 등 |
| iterator | __iter__(), __next__() 메서드로 값을 하나씩 꺼낼 수 있는 객체(직접 구현) ※ __iter__(): 이터레이터 객체 자신을 반환. ※ __next__(): 다음 값을 반환하고, 더 이상 값이 없으면 StopIteration 예외를 발생시킴. |
iter([1, 2, 3]) |
| iter(obj) | 반복 가능한 객체에서 이터레이터 생성. 리스트 전체 저장 | i = iter([1, 2, 3]) |
| next(iterator) | 다음 요소 반환 | next(i) → 1, 2, 3 |
| StopIteration | 더 이상 꺼낼 게 없을 때 발생하는 예외 | next(i) 마지막 호출 후 발생 |
📌 제너레이터 특징
| 구분 | 설명 | 에시 |
| yield 사용 | 함수 내에서 값을 하나씩 반환 다시 호출하면 일시정지했던 지점부터 계속 실행 |
def gen(): yield 1 yield 2 yield 3 for i in gen(): print(i) ... 1 2 3 |
| 상태 유지 | yield 이후 상태를 기억하고 다음 실행 시 계속 진행
|
![]() |
| 메모리 효율 | 전체 리스트 저장하지 않고도 반복 가능 | def gen(): yield 1 |
| 반복자 역할 | 자동으로 __iter__() & __next__() 구현됨 |
7-4. 파이썬 타입 어노테이션
변수나 함수의 매개변수, 반환값에 자료형 정보를 명시해 주는 문법.
실행에는 영향을 주지 않지만, 가독성과 협업, 자동화 도구 활용에 매우 유용.
📌 타입 어노테이션의 기본 문법
| 대상 | 문법 | 예시 |
| 변수 | 변수명: 타입 | ![]() |
| 함수 인자 | 매개변수: 타입 | ![]() |
| 함수 반환값 | -> 타입 | ![]() ※ 정수 int, 문자열 str, 리스트 list, 튜플 tuple, 딕셔너리 dict, 집합 set, 불 bool을 사용 |
📌 typing 모듈 활용
| 타입 | 설명 | 예시 |
| List[int] | 정수 리스트 | def total(scores: List[int]) -> int: |
| Dict[str, int] | 문자열 키, 정수 값 딕셔너리 | Dict[str, int] |
| Tuple[str, int] | 튜플 자료형 | Tuple[str, int] |
| Optional[str] | str 또는 None | Optional[str] |
| Union[int, str] | 두 개 이상의 타입 허용 | Union[int, str] |
※ mypy 이란?
정적 타입 검사기. 코드를 실행하기 전에 타입 어노테이션이 올바른지 미리 확인해준다.
(1)pip을 활용한 mypy(마이파이)설치
터미널 실행 → cd //Users/유저네임/doit → pip install mypy 입력/실행 → 'Collecting Faker…생략…Successfully installed mypy
| # | 예시 | 결과 |
| 다른 타입의 인수 입력 (int, float) > 저장 |
![]() |
mypy는 빈 줄, 주석 줄은 아예 줄 번호로 세지 않음. 실제 실행되는 코드 줄만 셈. |
| 터미널doit > mypy 파일명.py 입력 |
![]() |
typing_sample.py:3: error → 3번째 줄에 문법 오류가 있다 |
| typing_sample.py 열기 > 3번째 줄 코드 수정 | ![]() |
8 |
| 터미널doit > mypy 파일명.py 입력 |
오류가 없는 것을 확인 가능 |
'미래 먹거리를 위하여' 카테고리의 다른 글
| [파이썬 정복하기] 라이브러리 1장 - 텍스트 다루기(맥OS 기준) (0) | 2025.11.01 |
|---|---|
| [파이썬 정복하기] 점프 투 파이썬 8장 – 정규표현식 (책 없이 시작하기) (0) | 2025.10.31 |
| [파이썬 정복하기] 점프 투 파이썬 6장 – 파이썬 프로그래밍, 어떻게 시작해야 할까? (책 없이 시작하기) (1) | 2025.10.29 |
| [파이썬 정복하기] 점프 투 파이썬 5장 – 파이썬 날개 달기 ② (책 없이 시작하기) (0) | 2025.10.23 |
| [파이썬 정복하기] 점프 투 파이썬 5장 – 파이썬 날개 달기 ① (책 없이 시작하기) (0) | 2025.10.22 |









