본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 점프 투 파이썬 7장 – 파이썬 날아오르기 (책 없이 시작하기)

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 이후 상태를 기억하고 다음 실행 시 계속 진행

  • next(g)는 값을 하나씩 꺼냄
  • yield가 더 이상 없으면, 내부적으로 StopIteration 예외가 발생
  • 이건 정상적인 종료 신호
메모리 효율 전체 리스트 저장하지 않고도 반복 가능  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 입력
오류가 없는 것을 확인 가능