본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기6 (맥OS 기준)

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)  

라이브러리 예제 문제: 

점프 투 파이썬 - 라이브러리 예제 편 3장 16번 문제

 

점프 투 파이썬 - 라이브러리 예제 편 3장 16번 문제 정답: ['영어 초급', '영어 중급', '영어 문법', '영어 고급', '영어 회화']