07. 프랙탈(Fractal), 무한한 자기 닮음의 우주
1. 학습 목표 (Learning Objectives)
- 부분의 모양이 전체의 모양과 끝없이 똑같이 반복되는 ‘프랙탈(Fractal)’ 기하학의 신비를 탐구합니다.
- 파이썬(Python)의 ‘재귀함수(Recursion)’를 이용해 프랙탈의 대표적인 코흐 눈송이가 자라나는 수학적 모델링 공간을 체험합니다.
2. 끊임없이 자기를 복제하는 눈송이와 나뭇잎
겨울에 내리는 아름다운 눈송이를 현미경으로 확대해 본 적이 있나요? 눈송이의 끄트머리 가지 하나를 엄청나게 확대해서 보면, 놀랍게도 그 작은 나뭇가지 모양이 전체 눈송이의 커다란 모양 뼈대와 완벽하게 100% 닮아 있습니다. 그 작은 가지에 붙어있는 더 미세한 얼음 결정조차 똑같은 눈송이 형태를 띠고 있습니다.
수학에서는 이처럼 “일부분을 떼어내어 아무리 크게 확대해도, 그 모양이 다시 계속해서 전체 모양을 이루는 무한 반복 구조”를 가리켜 프랙탈(Fractal, 자기 닮음)이라고 부릅니다. 단순히 두 개의 도형이 닮았다는 수준을 넘어서, 도형 하나 안에 닮은 도형이 세포분열처럼 영원히 중첩 배열되는 궁극의 닮음입니다. 고사리 같은 양치식물의 잎맥 구조, 사람의 폐동맥 모세혈관, 비가 내릴 때 번쩍이는 번개의 갈래 줄기 등 자연계의 가장 거대하고 복잡한 시스템들은 사실 가장 단순한 하나의 닮음비 규칙(프랙탈)을 무한 루프로 재생시킨 결과물입니다.
3. 파이썬을 이용한 재귀 프랙탈 코딩 (Python)
개발자들은 컴퓨터 모니터 안에 은하수나 울창한 숲을 그려낼 때 일일이 이파리를 그리지 않습니다. 프랙탈 씨앗 함수 하나를 만들고 재귀(자신이 자신을 다시 부름)시켜 컴퓨터가 수만 개의 닮은 가지를 순식간에 복제해 내도록 명령합니다.
# 가장 간단한 문자열 기반 프랙탈 트리(가지치기) 시뮬레이션
def draw_fractal_tree(branch_length, level):
# 레벨이 0이 되면 가장 끝 잎사귀이므로 가지치기를 멈춥니다
if level == 0:
return
# 현재 가지의 길이를 출력 (시각화를 위해 '-' 기호 사용)
current_branch = "-" * branch_length
print(f"{' ' * (5 - level)} {current_branch} (레벨 {level})")
# ▷ 핵심: 나뭇가지 끝에서 '잘라진 길이(절반)'로
# 내 자신(draw_fractal_tree)을 다시 2개로 복제해서 뻗어나감!
new_length = branch_length // 2
draw_fractal_tree(new_length, level - 1) # 왼쪽 가지
draw_fractal_tree(new_length, level - 1) # 오른쪽 가지
# 길이 16짜리 거대한 기둥에서 시작하여 3번 분열하는 프랙탈 트리
print("=== 프랙탈 생명체의 무한 복제 시작 ===")
draw_fractal_tree(16, 3)
파이썬의 실행 결과 요약:
=== 프랙탈 생명체의 무한 복제 시작 ===
---------------- (레벨 3)
-------- (레벨 2)
---- (레벨 1)
---- (레벨 1)
-------- (레벨 2)
---- (레벨 1)
---- (레벨 1)
위 출력 결과처럼, 하나의 큰 줄기(레벨 3) 속에는 정확히 반으로 축소된 두 개의 중간 줄기(레벨 2)가, 그 속에는 আবার 그 절반으로 축소된 잎사귀(레벨 1)가 담겨 있습니다. 이 레벨을 무한대로 돌리면 거대한 우주 생성 시뮬레이션이 됩니다.
4. 학습 정리 (Summary)
- 프랙탈 (Fractal): 자기 자신의 크기를 축소시킨 닮음 모형들이 끝없이 중첩되어 전체의 형상을 이루는 ‘무한 자기 닮음’ 기하학입니다.
- 자연의 알고리즘: 복잡해 보이는 자연의 형태(혈관, 나뭇잎, 눈송이, 해안선)는 사실 아주 단순한 닮음비 확장 공식을 세포분열처럼 반복한 효율의 극치입니다.
- 컴퓨터 프로그래밍에서 함수가 자기 자신을 끝없이 호출하는 재귀 알고리즘(Recursion)은 수학의 프랙탈 개념을 코드로 완벽하게 번역한 기술입니다.
서브목차