11# ** Standard Library**
22
3- Python이 기본 제공하는 모듈들
3+ Python이 기본 제공하는 모듈들
44
55## ** 1. collections**
6+
67Python의 ` collections ` 모듈은 다양한 데이터 구조를 쉽게 다룰 수 있도록 도와줌.
78
89Counter, defaultdict, deque, OrderedDict, namedtuple 등이 자주 사용된다.
910
1011### 1.1 ** collections.Counter (요소 개수 세기)**
12+
1113리스트 요소의 개수를 쉽게 세는 기능.
1214
1315#### dict 사용
16+
1417``` python
1518words = [" apple" , " banana" , " apple" , " cherry" , " banana" , " apple" ]
1619word_count = {}
@@ -25,6 +28,7 @@ print(word_count)
2528- dict를 사용하면 키가 존재하는지 매번 확인해야 하므로 코드가 복잡하고 비효율적.
2629
2730#### collections.Counter 사용
31+
2832``` python
2933from collections import Counter
3034
@@ -36,9 +40,11 @@ print(word_count)
3640- 내부적으로 최적화되어 있어 요소 개수를 더 빠르고 간결하게 계산.
3741
3842### 1.2 ** collections.deque (빠른 리스트 연산)**
43+
3944앞쪽 원소 삽입/삭제 시 ` list ` 는 O(n)이지만 ` deque ` 는 O(1)로 동작.
4045
4146#### 리스트 사용 (비효율적)
47+
4248``` python
4349lst = [1 , 2 , 3 ]
4450lst.insert(0 , 0 ) # O(n) 연산
@@ -48,6 +54,7 @@ lst.pop(0) # O(n) 연산
4854- list는 앞쪽 원소를 삽입/삭제할 때 모든 요소를 이동해야 하므로 O(n) 시간이 걸림.
4955
5056#### deque 사용 (효율적)
57+
5158``` python
5259from collections import deque
5360
@@ -59,13 +66,15 @@ dq.popleft() # O(1)
5966- deque는 양쪽 끝에서 O(1)로 삽입/삭제 가능하여 효율적.
6067
6168## ** 2. itertools**
69+
6270반복 가능한 객체를 다루는 다양한 기능 제공.
6371
64- count, cycle, chain, permutations, starmap 등을 사용하여 반복문과 조건문을 간단하고 효율적으로 처리할 수 있도록 도와준다 .
72+ count, cycle, chain, permutations, starmap 등을 사용하여 반복문과 조건문을 간단하고 효율적으로 처리할 수 있도록 도와줌 .
6573
6674### 2.1 ** itertools.permutations (순열 조합 구하기)**
6775
6876#### 재귀 함수 사용
77+
6978``` python
7079def permute (arr , path = []):
7180 if not arr:
@@ -80,6 +89,7 @@ permute([1, 2, 3])
8089- 재귀 호출로 인해 비효율적이고 코드가 길어짐.
8190
8291#### itertools.permutations 사용
92+
8393``` python
8494from itertools import permutations
8595
@@ -91,9 +101,11 @@ print(perm_list)
91101- 내부적으로 최적화되어 간결하고 빠름.
92102
93103### 2.2 ** itertools.starmap (튜플 언패킹 최적화)**
104+
94105` map() ` 대신 사용하면 성능 향상.
95106
96107#### 일반 map() 사용
108+
97109``` python
98110def add (a , b ):
99111 return a + b
@@ -105,6 +117,7 @@ result = list(map(lambda x: add(*x), pairs))
105117- lambda로 언패킹해야 함.
106118
107119#### starmap() 사용
120+
108121``` python
109122from itertools import starmap
110123
@@ -118,13 +131,15 @@ result = list(starmap(add, pairs))
118131- 불필요한 lambda 호출을 줄여 성능이 향상됨.
119132
120133## ** 3. functools**
134+
121135함수 최적화 및 고차 함수 지원.
122136
123137lru_cache, partial, reduce, update_wrapper, total_ordering 등 여러 고차 함수들을 통해 반복적인 작업을 최적화하고, 코드의 가독성 및 재사용성을 높이는 데 유용하다.
124138
125139### 3.1 ** functools.lru_cache (재귀 최적화)**
126140
127141#### 사용하지 않음 (느림)
142+
128143``` python
129144def fib (n ):
130145 if n <= 1 :
@@ -138,6 +153,7 @@ print(fib(30)) # 매우 느림
138153- 호출 깊이가 커질수록 기하급수적으로 느려짐
139154
140155#### lru_cache 사용 (빠름)
156+
141157``` python
142158from functools import lru_cache
143159
@@ -154,6 +170,7 @@ print(fib(30)) # 훨씬 빠름
154170- 불필요한 연산을 제거해 실행 속도 대폭 향상
155171
156172## ** 4. datetime**
173+
157174날짜 및 시간 다루기.
158175
159176날짜, 시간, 시간 차이, 시간대 변환 등을 손쉽게 처리할 수 있는 기능을 제공한다.
@@ -163,6 +180,7 @@ datetime 객체의 메소드를 사용하면 날짜와 시간 연산을 간단
163180### 4.1 ** datetime.datetime (시간 정보 가져오기)**
164181
165182#### time 사용
183+
166184``` python
167185import time
168186
@@ -174,6 +192,7 @@ print(f"현재 연도: {int(year)}")
174192- Unix 타임스탬프를 직접 변환 → 연도 계산이 번거롭고 가독성 낮음
175193
176194#### datetime 사용
195+
177196``` python
178197from datetime import datetime
179198
@@ -184,6 +203,7 @@ print(f"현재 연도: {now.year}")
184203- 즉시 연도 반환
185204
186205## ** 5. pathlib**
206+
187207파일 시스템 경로 다루기.
188208
189209pathlib는 파일 경로를 다루는 다양한 메소드를 제공한다. 예를 들어, joinpath()로 경로를 이어 붙이거나, stem, suffix와 같은 속성을 이용해 파일명이나 확장자도 쉽게 다룰 수 있다.
@@ -193,6 +213,7 @@ pathlib는 파일 경로를 다루는 다양한 메소드를 제공한다. 예
193213### 5.1 ** pathlib.Path (파일 존재 여부 확인)**
194214
195215#### os 사용
216+
196217``` python
197218import os
198219
@@ -204,6 +225,7 @@ if os.path.exists(filepath):
204225- 문자열 경로 처리
205226
206227#### pathlib.Path 사용
228+
207229``` python
208230from pathlib import Path
209231
@@ -215,20 +237,23 @@ if filepath.exists():
215237- Path 객체 사용 → 경로 조작이 직관적이고 가독성 향상
216238
217239## ** 6. array**
240+
218241메모리 효율적인 배열 사용.
219242
220243메모리 절약, 인덱스 접근 속도 향상 등의 장점도 있지만 데이터 타입을 고정해야 하므로, 서로 다른 데이터 타입을 저장할 수 있는 리스트보다 유연성이 떨어진다.
221244
222245### 6.1 ** array.array**
223246
224247#### 리스트 사용 (비효율적)
248+
225249``` python
226250lst = [1 , 2 , 3 , 4 , 5 ] # 객체 포인터 저장
227251```
228252
229253- 객체 포인터 저장 → 메모리 사용량 증가
230254
231255#### array 사용 (효율적)
256+
232257``` python
233258from array import array
234259
@@ -242,6 +267,7 @@ arr = array('i', [1, 2, 3, 4, 5]) # 'i'는 정수(int) 타입 지정
242267### 7.1 ** multiprocessing (CPU 병렬 처리)**
243268
244269#### 단일 프로세스 실행 (느림)
270+
245271``` python
246272def work (n ):
247273 return sum (i* i for i in range (n))
@@ -253,6 +279,7 @@ results = [work(n) for n in nums] # 한 개씩 실행 (느림)
253279- 한 번에 하나씩 처리 → CPU 코어 활용 부족
254280
255281#### multiprocessing 사용 (빠름)
282+
256283``` python
257284from multiprocessing import Pool
258285
@@ -269,6 +296,7 @@ with Pool() as pool:
269296### 7.2 ** concurrent.futures.ThreadPoolExecutor (I/O 최적화)**
270297
271298#### 단일 스레드 실행 (느림)
299+
272300``` python
273301import requests
274302
@@ -282,6 +310,7 @@ for url in urls:
282310- 한 번에 하나씩 처리 → I/O 작업에 시간이 많이 소요됨
283311
284312#### ThreadPoolExecutor 사용 (빠름)
313+
285314``` python
286315from concurrent.futures import ThreadPoolExecutor
287316import requests
@@ -295,4 +324,164 @@ for response in results:
295324 print (response.status_code)
296325```
297326
298- - 여러 스레드에서 병렬 실행 → I/O 대기 시간 동안 다른 요청 처리 가능, 속도 향상
327+ - 여러 스레드에서 병렬 실행 → I/O 대기 시간 동안 다른 요청 처리 가능, 속도 향상
328+
329+ ## ** 8. heapq**
330+
331+ 우선순위 큐 알고리즘 구현 시 사용되는 최소 힙 기반의 모듈.
332+
333+ ### 8.1 ** heapq.heappush / heappop (우선순위 큐 구현)**
334+
335+ 리스트를 최소 힙처럼 사용 가능.
336+
337+ #### 리스트 정렬 방식 (비효율적)
338+
339+ ``` python
340+ lst = [3 , 1 , 2 ]
341+ lst.sort() # 최소값을 꺼내기 위해 정렬 필요
342+ min_val = lst.pop(0 ) # O(n)
343+ ```
344+
345+ - 최소값 추출 시 정렬 필요 → 비효율적
346+
347+ #### heapq 사용 (효율적)
348+
349+ ``` python
350+ import heapq
351+
352+ heap = []
353+ heapq.heappush(heap, 3 )
354+ heapq.heappush(heap, 1 )
355+ heapq.heappush(heap, 2 )
356+
357+ print (heapq.heappop(heap)) # 1
358+ ```
359+
360+ - 최소값 추출이 O(log n)으로 효율적
361+ - 다익스트라, 작업 스케줄링 문제에 활용됨
362+
363+ ## ** 9. bisect**
364+
365+ 정렬된 리스트에 이진 탐색 기반 삽입/탐색 기능 제공.
366+
367+ ### 9.1 ** bisect.bisect / bisect.insort (이진 삽입/탐색)**
368+
369+ #### 일반 삽입 (비효율적)
370+
371+ ``` python
372+ lst = [1 , 3 , 4 , 6 ]
373+ lst.append(5 )
374+ lst.sort() # 정렬 다시 수행 → 비효율적
375+ ```
376+
377+ #### bisect 사용 (효율적)
378+
379+ ``` python
380+ import bisect
381+
382+ arr = [1 , 3 , 4 , 6 ]
383+ bisect.insort(arr, 5 ) # 정렬된 상태 유지
384+ print (arr) # [1, 3, 4, 5, 6]
385+
386+ idx = bisect.bisect(arr, 4 )
387+ print (idx) # 3 (4가 삽입될 위치)
388+ ```
389+
390+ - 정렬 리스트에서 이진 탐색으로 빠르게 삽입/탐색
391+
392+ ## ** 10. math**
393+
394+ 수학 연산 지원 (루트, 팩토리얼, 최대공약수 등).
395+
396+ ### 10.1 ** math.sqrt / factorial / gcd (수학 함수)**
397+
398+ ``` python
399+ import math
400+
401+ print (math.sqrt(16 )) # 4.0
402+ print (math.factorial(5 )) # 120
403+ print (math.gcd(12 , 18 )) # 6
404+ ```
405+
406+ - 수학 문제, 알고리즘 구현 시 유용
407+
408+ ## ** 11. statistics**
409+
410+ 기초 통계 계산을 위한 모듈.
411+
412+ ### 11.1 ** statistics.mean / median (평균/중앙값)**
413+
414+ ``` python
415+ import statistics
416+
417+ data = [1 , 2 , 3 , 4 , 5 ]
418+ print (statistics.mean(data)) # 3
419+ print (statistics.median(data)) # 3
420+ ```
421+
422+ - 데이터 분석, 요약 통계에 적합
423+
424+ ## ** 12. enum**
425+
426+ 열거형 상수를 정의할 수 있는 모듈.
427+
428+ ### 12.1 ** Enum 클래스 (가독성 있는 상수 정의)**
429+
430+ ``` python
431+ from enum import Enum
432+
433+ class Color (Enum ):
434+ RED = 1
435+ GREEN = 2
436+ BLUE = 3
437+
438+ print (Color.RED ) # Color.RED
439+ print (Color.RED .value) # 1
440+ ```
441+
442+ - 의미 있는 값 이름으로 가독성 향상
443+
444+ ## ** 13. pprint**
445+
446+ 복잡한 자료구조를 보기 좋게 출력할 때 사용.
447+
448+ ### 13.1 ** pprint.pprint (딕셔너리 예쁘게 출력)**
449+
450+ ``` python
451+ from pprint import pprint
452+
453+ data = {" users" : [{" name" : " Alice" , " age" : 30 }, {" name" : " Bob" , " age" : 25 }]}
454+ pprint(data)
455+ ```
456+
457+ - 중첩 구조를 보기 좋게 정렬하여 출력
458+
459+ ## ** 14. textwrap**
460+
461+ 긴 문자열을 줄 바꿈 등으로 포맷팅.
462+
463+ ### 14.1 ** textwrap.fill (자동 줄바꿈)**
464+
465+ ``` python
466+ import textwrap
467+
468+ text = " Python is an interpreted high-level general-purpose programming language."
469+ print (textwrap.fill(text, width = 30 ))
470+ ```
471+
472+ - CLI/터미널에서 텍스트 출력 시 유용
473+
474+ ## ** 15. uuid**
475+
476+ 전역 고유 식별자(UUID) 생성에 사용.
477+
478+ ### 15.1 ** uuid.uuid4 (고유값 생성)**
479+
480+ ``` python
481+ import uuid
482+
483+ unique_id = uuid.uuid4()
484+ print (unique_id)
485+ ```
486+
487+ - 고유한 파일명, 데이터 식별자 생성 시 사용
0 commit comments