OS: MAC
참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기
015. 숫자에 이름을 붙여 사용하려면? ― enum(이넘)
- Enum은 숫자 대신 의미를 가진 이름을 쓰게 해주고, 코드의 가독성, 안전성, 유지보수성을 모두 높여주는 구조
| 구분 | 설명 | 예제 | 결과 |
| 모듈 임포트 | 열거형(Enum)을 사용하기 위해 필요 | from enum import Enum | — |
| 기본 구조 | 클래스처럼 정의하고, 각 항목에 숫자나 값을 지정 | class Color(Enum): RED=1; GREEN=2; BLUE=3 | Color.RED |
| 접근 | 이름 또는 값으로 접근 가능 | Color.RED.name, Color.RED.value | 'RED', 1 |
| 비교 | 직접 값 비교 가능 (==, is) | Color.RED == Color(1) | True |
| 반복(iteration) | for문으로 모든 Enum 멤버 순회 가능 | for c in Color: print(c.name, c.value) |
RED 1, GREEN 2, BLUE 3 |
| 역참조 (by value) |
값으로 Enum 멤버 찾기 | Color(2) | Color.GREEN |
| 자동 번호 부여 (auto()) |
번호 자동 증가 (1부터 시작) | from enum import auto class Color(Enum): RED=auto(); GREEN=auto() |
RED=1, GREEN=2 |
| 사용자 지정 메서드 추가 | 클래스 안에 함수 정의 가능 | def is_primary(self): return self in (Color.RED, Color.BLUE, Color.YELLOW) |
커스텀 기능 구현 |
| 문자열 출력 커스터마이징 | __str__ 재정의 가능 | def __str__(self): return f"{self.name}({self.value})" |
RED(1) 출력 |
| Enum 멤버 고정 (불변성) | 값 재할당 불가 (Color.RED = 5 → ❌ 오류) |
안정적인 코드 유지 |
💡 실제 쓰임새 예시들
| 예시 | 예제 | 결과 |
| 학점 등급 | from enum import Enum class Grade(Enum): F=0; D=1; C=2; B=3; A=4 ① print(Grade.A.name) ② print(Grade.A.value) |
① A ② 4 |
| HTTP 상태 코드 | class Status(Enum): OK=200; NOT_FOUND=404; ERROR=500 ① print(Status.OK.value) ② print(Status.OK.name) |
① 200 ② OK |
| 게임 캐릭터 상태 | class State(Enum): IDLE=1; ATTACK=2; DEFEND=3 ① print(State.IDLE.value) ② print(State.ATTACK.name) |
① 1 ② ATTACK |
| 결제 단계 | class Payment(Enum): PENDING=1; DONE=2; FAILED=3 ① print(Payment.FAILED.value) ② print(Payment.PENDING.name) |
① 3 ② PENDING |
| 신호등 상태 | class Signal(Enum): RED=1; YELLOW=2; GREEN=3 ① print(Signal.YELLOW.value) ② print(Signal.GREEN.name) |
① 2 ② GREEN |
016. 수강할 과목의 순서를 구하려면? ― graphlib.TopologicalSorter
(그래프립 토폴로지컬 소터)
- "먼저 해야 할 것부터 차례대로” 정렬하는 알고리즘.
- C언어 → 자료구조 → 알고리즘 → 인공지능
- 컴퓨터구조 → 운영체제
| 구분 | 설명 | 예제 | 결과/비고 |
| 모듈 임포트 | 위상 정렬 기능을 제공하는 그래프 라이브러리 |
from graphlib import TopologicalSorter | Python 3.9 이상 필요 |
| 기본 개념 | 작업(또는 과목) 간 선후 관계를 정의하고, 가능한 순서를 자동으로 정렬 |
— | "무엇을 먼저 해야 하는가" 문제 해결 |
| 그래프 정의 | 딕셔너리 {노드: [선행노드들]} 형식 | graph = { "자료구조": ["알고리즘"], "컴퓨터개론": ["자료구조"], "영어": [], "알고리즘": ["인공지능"], "인공지능": [] } | 각 과목별 선수 과목 관계 정의 |
| 정렬 실행 | ts = TopologicalSorter(graph) order = tuple(ts.static_order()) |
('영어', '컴퓨터개론', '자료구조', '알고리즘', '인공지능') | 수강 가능한 순서 반환 |
| 주요 메서드 | static_order() : 전체 순서 계산 prepare() : 준비 get_ready() : 현재 가능한 노드 done(node) : 완료 표시 |
— | 점진적 처리도 가능 |
| 활용 예시 | 수강 과목 순서프로젝트 빌드 의존 관계업무 우선순위 계산 | python ts = TopologicalSorter(graph) | 위상 정렬 (Topological Sort) 응용 |
| TopologicalSorter(graph) | 그래프 구조 입력 (딕셔너리) | graph = { "C언어": ["자료구조"], "자료구조": ["알고리즘"], "컴퓨터구조": ["운영체제"], "운영체제": [], "알고리즘": ["인공지능"], "인공지능": [] } ts = TopologicalSorter(graph) print(list(ts.static_order())) |
['운영체제', '컴퓨터구조', 'C언어', '자료구조', '알고리즘', '인공지능'] |
| .static_order() | 가능한 순서 전체 반환 (튜플) | tuple(ts.static_order()) | |
| .prepare() | 점진적으로 정렬 준비 | ts.prepare() | |
| .get_ready() | 현재 수행 가능한 노드 반환 | ts.get_ready() | |
| .done(node) | 완료된 노드 표시 | ts.done(node) |
라이브러리 예제 문제:


'미래 먹거리를 위하여' 카테고리의 다른 글
| [파이썬 정복하기] 라이브러리 5장 - 함수형 프로그래밍 다루기1 (맥OS 기준) (0) | 2025.11.10 |
|---|---|
| [파이썬 정복하기] 라이브러리 4장 - 수학과 숫자 다루기 (맥OS 기준) (0) | 2025.11.09 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기5 (맥OS 기준) (1) | 2025.11.07 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기4 (맥OS 기준) (0) | 2025.11.06 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기3 (맥OS 기준) (0) | 2025.11.05 |