중첩(重疊) 7
import time
# --- 상수 정의 (Define Constants) ---
MELODY_A = "방. 흰색. 사각형."
MELODY_B = "밖으로 나가고 싶다."
PERCEIVERS = [
"나",
"그림자",
"벽의 얼룩",
"먼지",
"천장의 금",
"문",
"열쇠 구멍",
"공기"
]
# --- 1. 커스텀 예외 정의 ---
class ConsciousnessOverflowError(Exception):
"""의식 스택이 포화 상태에 도달했을 때 발생하는 예외"""
pass
def think(perceiver, melody):
"""하나의 '생각' 단위를 포맷하는 순수 함수"""
return f'<{perceiver}>.think("{melody}")'
def build_bolero_process(perceivers, melody_a, melody_b):
"""
'볼레로'의 점증적이고 중첩되는 구조(structured_stack)를 생성합니다.
"""
structured_stack = []
for i, current_perceiver in enumerate(perceivers):
current_round_thoughts = []
# 1. [멜로디 A]
current_round_thoughts.append(think(current_perceiver, melody_a))
# 2. [멜로디 B] (Crescendo)
current_orchestra = perceivers[:i + 1]
for inner_perceiver in current_orchestra:
current_round_thoughts.append(think(inner_perceiver, melody_b))
structured_stack.append(current_round_thoughts)
return structured_stack
def run_simulation(structured_stack):
"""
생성된 데이터 구조를 시각화하여 '실행'하고,
클라이맥스에서 예외를 'raise'합니다.
"""
print("--- 의식 프로세스 시뮬레이션 시작 (PID: 008) ---\n")
for i, thought_round in enumerate(structured_stack):
perceiver_name = PERCEIVERS[i]
print(f"--- 루프 {i} (주체: \"{perceiver_name}\") ---")
print(f" [ 총 {len(thought_round)}개의 생각이 이 라운드에서 중첩됨 ]")
for thought in thought_round:
if MELODY_B in thought:
print(f" > {thought}")
else:
print(f" > {thought}")
time.sleep(0.05)
print(f"--- 루프 {i} 종료 ---\n")
time.sleep(0.5)
# --- 2. 'while' 루프를 사용한 클라이맥스 ---
print("--- 클라이맥스: 스택 오버플로 ---")
print("LOG: 시스템 부하 임계점 도달.")
print("LOG: 개별 'Thought' 객체가 붕괴하여 단일 데이터 블록으로 압축됨.")
time.sleep(0.3)
print("...")
repetition_count = 0
while repetition_count < 5: # 5번 반복하여 압도적인 느낌을 시뮬레이션
print("방흰색사각형밖으로나가고싶다방흰색사각형밖으로나가고싶다방흰색사각형...")
repetition_count += 1
time.sleep(0.1)
print("...")
time.sleep(0.3)
# --- 1. (계속) 예외 'raise' ---
# 시뮬레이션이 클라이맥스에 도달했으므로, 예외를 발생시킴
raise ConsciousnessOverflowError("의식 포화 상태")
# --- 스크립트 실행 (try...except...finally 적용) ---
if __name__ == "__main__":
try:
# 1. 데이터 구조 생성 (Functional)
bolero_structure = build_bolero_process(PERCEIVERS, MELODY_A, MELODY_B)
# 2. 시뮬레이션 실행 (Procedural)
# 이 함수는 실행 도중 'ConsciousnessOverflowError'를 raise 할 것임
run_simulation(bolero_structure)
except ConsciousnessOverflowError as e:
# --- 3. 예외 처리 및 조옮김 (Coda) ---
# raise된 예외를 여기서 CATCH함
print(f"\n--- 예외 처리: 조옮김 (Coda) ---")
print(f"CATCH: {type(e).__name__} ({e})")
print("LOG: 예기치 않은 주체('문')가 루프 외부에서 응답.")
# '문'은 PERCEIVERS[5] 이지만, 여기서는 상징적 객체로 사용
final_response = 'PERCEIVERS["문"].return("너는 밖이다.")'
print(f"EXEC: {final_response}")
print("\nOUTPUT: 너는 밖이다.")
finally:
# 예외 발생 여부와 관계없이 항상 실행됨
print("\n--- 프로세스 종료 ---")
python3 bolero.py
--- 의식 프로세스 시뮬레이션 시작 (PID: 007) ---
--- 루프 0 (주체: "나") ---
[ 총 2개의 생각이 이 라운드에서 중첩됨 ]
> <나>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
--- 루프 0 종료 ---
--- 루프 1 (주체: "그림자") ---
[ 총 3개의 생각이 이 라운드에서 중첩됨 ]
> <그림자>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
--- 루프 1 종료 ---
--- 루프 2 (주체: "벽의 얼룩") ---
[ 총 4개의 생각이 이 라운드에서 중첩됨 ]
> <벽의 얼룩>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
> <벽의 얼룩>.think("밖으로 나가고 싶다.")
--- 루프 2 종료 ---
--- 루프 3 (주체: "먼지") ---
[ 총 5개의 생각이 이 라운드에서 중첩됨 ]
> <먼지>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
> <벽의 얼룩>.think("밖으로 나가고 싶다.")
> <먼지>.think("밖으로 나가고 싶다.")
--- 루프 3 종료 ---
--- 루프 4 (주체: "천장의 금") ---
[ 총 6개의 생각이 이 라운드에서 중첩됨 ]
> <천장의 금>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
> <벽의 얼룩>.think("밖으로 나가고 싶다.")
> <먼지>.think("밖으로 나가고 싶다.")
> <천장의 금>.think("밖으로 나가고 싶다.")
--- 루프 4 종료 ---
--- 루프 5 (주체: "문") ---
[ 총 7개의 생각이 이 라운드에서 중첩됨 ]
> <문>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
> <벽의 얼룩>.think("밖으로 나가고 싶다.")
> <먼지>.think("밖으로 나가고 싶다.")
> <천장의 금>.think("밖으로 나가고 싶다.")
> <문>.think("밖으로 나가고 싶다.")
--- 루프 5 종료 ---
--- 루프 6 (주체: "열쇠 구멍") ---
[ 총 8개의 생각이 이 라운드에서 중첩됨 ]
> <열쇠 구멍>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
> <벽의 얼룩>.think("밖으로 나가고 싶다.")
> <먼지>.think("밖으로 나가고 싶다.")
> <천장의 금>.think("밖으로 나가고 싶다.")
> <문>.think("밖으로 나가고 싶다.")
> <열쇠 구멍>.think("밖으로 나가고 싶다.")
--- 루프 6 종료 ---
--- 루프 7 (주체: "공기") ---
[ 총 9개의 생각이 이 라운드에서 중첩됨 ]
> <공기>.think("방. 흰색. 사각형.")
> <나>.think("밖으로 나가고 싶다.")
> <그림자>.think("밖으로 나가고 싶다.")
> <벽의 얼룩>.think("밖으로 나가고 싶다.")
> <먼지>.think("밖으로 나가고 싶다.")
> <천장의 금>.think("밖으로 나가고 싶다.")
> <문>.think("밖으로 나가고 싶다.")
> <열쇠 구멍>.think("밖으로 나가고 싶다.")
> <공기>.think("밖으로 나가고 싶다.")
--- 루프 7 종료 ---
--- 클라이맥스: 스택 오버플로 ---
LOG: 시스템 부하 임계점 도달.
LOG: 개별 'Thought' 객체가 붕괴하여 단일 데이터 블록으로 압축됨.
...
방흰색사각형밖으로나가고싶다방흰색사각형밖으로나가고싶다방흰색사각형...
방흰색사각형밖으로나가고싶다방흰색사각형밖으로나가고싶다방흰색사각형...
방흰색사각형밖으로나가고싶다방흰색사각형밖으로나가고싶다방흰색사각형...
방흰색사각형밖으로나가고싶다방흰색사각형밖으로나가고싶다방흰색사각형...
방흰색사각형밖으로나가고싶다방흰색사각형밖으로나가고싶다방흰색사각형...
...
--- 예외 처리: 조옮김 (Coda) ---
CATCH: ConsciousnessOverflowError (의식 포화 상태)
LOG: 예기치 않은 주체('문')가 루프 외부에서 응답.
EXEC: PERCEIVERS["문"].return("너는 밖이다.")
OUTPUT: 너는 밖이다.
--- 프로세스 종료 ---
상기 코드는 Python3 에서 실제로 실행 가능합니다.