프랙탈 패턴은 자연 곳곳에서 쉽게 찾아볼 수 있습니다. 고사리 잎에서 작은 가지 하나를 떼어내 보면 잎 전체와 놀랍도록 닮아 있고, 길가의 자갈 하나가 웅장한 산의 형태를 연상시키기도 합니다. 이처럼 작은 패턴이 반복되어 하나의 큰 패턴을 이루는 구조를 프랙탈(fractal)이라고 하며, 이를 나무 가지 형태로 시각화한 것이 바로 프랙탈 트리입니다.
파이썬에서는 기본으로 제공되거나 설치 가능한 다양한 모듈을 활용해 손쉽게 프랙탈 트리를 그릴 수 있습니다. 이번 글에서는 대표적인 두 가지 방법인 pygame과 turtle 모듈을 이용한 구현 방법을 살펴보겠습니다.
1. pygame 모듈로 구현하기
pygame은 게임 및 그래픽 개발에 널리 쓰이는 모듈로, 프랙탈 트리를 그리는 데 필요한 선 그리기 함수들을 제공합니다. 구현 순서는 다음과 같습니다.
- 먼저 화면(윈도우)의 크기를 정의합니다.
- 패턴이 반복될 깊이(deepness)를 지정합니다.
- 재귀(recursion)를 통해 동일한 패턴을 설정된 깊이까지 계속 반복해서 그립니다.
여기서 재귀가 핵심 역할을 합니다. 한 번 그린 선의 끝점에서 좌우로 일정한 각도(±25도)만큼 방향을 바꿔 새로운 선을 그리고, 이 과정을 깊이가 소진될 때까지 반복하면 자연스러운 나무 형태가 완성됩니다.
예제 코드
import pygame, math
pygame.init()
screen = pygame.display.set_mode((750, 650))
pygame.display.set_caption("Fractal Tree")
display = pygame.display.get_surface()
def drawTree(a, b, pos, deepness):
if deepness:
c = a + int(math.cos(math.radians(pos)) * deepness * 10.0)
d = b + int(math.sin(math.radians(pos)) * deepness * 10.0)
pygame.draw.line(display, (127,255,0), (a, b), (c, d), 1)
drawTree(c, d, pos - 25, deepness - 1)
drawTree(c, d, pos + 25, deepness - 1)
def process(event):
if event.type == pygame.QUIT:
exit(0)
drawTree(370, 650, -90, 10)
pygame.display.flip()
while True:
process(pygame.event.wait())
실행 결과
위 코드를 실행하면 화면 중앙에서 위로 뻗어나가는 아름다운 프랙탈 트리를 확인할 수 있습니다.

2. turtle 모듈로 구현하기
파이썬에 기본 포함된 turtle 모듈을 사용하면 더욱 직관적으로 프랙탈 트리를 구현할 수 있습니다. 거북이(turtle)가 그리기 방향만 바꿔가며 나뭇가지를 반복 패턴으로 그려나가는 방식입니다. 함수가 반복될 각도를 정의해두면, 재귀 호출을 통해 완성된 나무 모습을 얻을 수 있습니다.
코드의 동작 원리를 간단히 설명하면 다음과 같습니다.
- 가지의 길이(
Length)가 10보다 클 때만 그리기를 진행합니다(종료 조건). - 앞으로 이동한 뒤 오른쪽으로 25도 회전하고, 길이를 15 줄여 재귀 호출합니다.
- 왼쪽으로 50도 회전해 반대편 가지도 그린 후, 원래 위치로 되돌아옵니다.
예제 코드
import turtle
def tree(Length, n):
if Length > 10:
n.forward(Length)
n.right(25)
tree(Length-15, n)
n.left(50)
tree(Length-15, n)
n.right(25)
n.backward(Length)
def function():
n = turtle.Turtle()
data = turtle.Screen()
n.left(90)
n.up()
n.backward(100)
n.down()
n.color("green")
tree(85, n)
data.exitonclick()
function()
실행 결과
위 코드를 실행하면 초록색 선으로 이루어진 균형 잡힌 프랙탈 트리가 화면에 나타납니다. 창을 클릭하면 프로그램이 종료됩니다.

마무리
프랙탈 트리는 재귀 알고리즘의 동작 원리를 시각적으로 이해하기에 가장 좋은 예제 중 하나입니다. 분기 각도(±25도), 깊이, 길이 감소 폭 등의 매개변수 값을 조절해보면서 다양한 형태의 나무를 만들어 보세요. pygame은 빠른 그래픽 렌더링이 필요할 때, turtle은 학습용 인터랙티브 실습에 적합합니다.