3.1.5.4 복소수 (Complex Numbers): 1차원 선에서 2차원 평면으로 폭발
학습목표
루트 기호 안에 들어간 마이너스 기호라는 ‘불가능(허수)’의 금제에서 탄생하여, 수학을 2차원 복소평면 모델링으로 진화시킨 복소수 원리를 학습합니다. 파이썬이 타 언어가 버거워하는 복소수를 왜 언어 단에서 기본 코어 자료형으로 탑재해 주었는지 공학적 이유를 발견합니다.
1. 차원을 뛰어넘은 발칙한 상상: 허수 $i$ 의 탄생
수학자들은 수학의 틀에 갇히는 대신 아예 우주의 물리 법칙을 새로 써버리는 버릇이 있습니다. “$x^2 = -1$ 이라는 절대 불가능한 방정식을 기어코 풀고 싶다!”는 열망 구조죠. 똑같은 수를 두 번 곱해서 마이너스가 나오게 하는 마법의 상상 속 숫자, 대수학자 오일러(Euler)가 처음 이름 붙인 허수(Imaginary Numbers) 기호 $i$의 탄생입니다.
(웹툰 비유: 현실 세계(실수)에서는 절대 풀 수 없는 ‘제곱해서 마이너스가 되는’ 저주받은 방정식을 풀기 위해, 오일러가 상상의 마법 파티클 $i$를 교실에 소환하며 당당하게 해법을 선언하는 장면)
기존 현실이던 1차원 수직선 위 숫자들인 실수(Real Numbers)부에 이 상상의 세계 숫자 허수부를 결합하여 수식 하나로 하이브리드 한 무적의 숫자가 바로 복소수(Complex Numbers)입니다.
- 수학 표현식: $a + bi$ (파이썬 표현식: $a + bj$ — 파이썬과 공학에서는 전류 기호 $I$ 와의 헷갈림을 막기 위해 $j$ 사용)
2. 왜 굳이 파이썬은 복소수를 지원할까? ($90^{\circ}$ 공간 회전)
일반적인 자바(Java) 프론트엔드나 웹 코딩을 할 때 복소수를 볼 확률은 거의 $0\%$입니다. 그렇지만 파이썬이 복소수 타입을 complex라는 당당한 기본 객체로 채택한 이유는 데이터 공학과 빅데이터 물리 엔진을 위한 언어이기 때문입니다.
수학이야기 32. 복소수에서 배웠듯, 허수가 개입된 복소수 평면은 1차원의 직선을 2차원(2D 평면 공간)으로 끌어올립니다. 무엇보다도 $i$ (또는 $j$)를 곱하는 연산은 기존의 ‘크기 증가’가 아니라, 아름답고 오차가 적은 공간 상의 $90^{\circ}$ 회전 이동(Rotation)이라는 엄청난 무기가 됩니다!
(다이어그램: 현실 세계의 숫자 $1$에 상상의 마법 가루 $i$ ($j$)를 거듭 곱할 때마다 공간에서 빙글빙글 $90^{\circ}$씩 회전하며 $1 \rightarrow j \rightarrow -1 \rightarrow -j \rightarrow 1$ 사이클을 도는 원리)
- 푸리에 변환(신호 처리): 우리가 목소리를 남기는 음성 신호나 복잡한 음악, 휴대폰 통신의 와이파이 주파수 파동(Wave) 그래프의 미세한 곡선 위상 처리에 복소수 회전 계산만큼 압도적으로 강력한 것이 없습니다.
- 양자 컴퓨팅, 우주 궤도: 전자파 시뮬레이션이나 게임 3D 엔진의 짐벌락(Gimbal Lock) 방지 등, 공간과 차원을 움직이는 공학 모델의 절대 병기입니다. 파이썬은 이 모든 계산을 외부 라이브러리 없이 자체
complex타입만으로 완벽하게 감당합니다.
3. 파이썬 complex 타입 활용 실습
파이썬에서는 변수에 숫자 + 문자 j를 붙이는 것만으로 즉시 복소수 객체가 생성되며, 내장 메서드를 통해 실수부와 허수부를 분리해 뽑아먹을 수 있습니다. 놀라운 활용법을 구경합시다!
# 1. 1차원의 실수 더하기 2차원 허수부 결합 (기호 j 사용)
c1 = 3 + 4j
print(c1, "데이터 타입:", type(c1))
# 2. 파이썬 내장함수를 통한 복소수 소환
c2 = complex(1, -2)
print("\n덧셈 연산:", c1 + c2)
print("곱셈 (2차원 평면의 회전 믹스결과):", c1 * c2)
# 3. 2차원 요소별 객체 분리 추출
print("\n--- 객체 속성 추적 ---")
print("실제 세상 부분 (Real):", c1.real)
print("상상 세상 부분 (Imaginary):", c1.imag)
# 켤레복소수 (허수부의 부호만 거꾸로 엎어 대칭 이동)
print("거울 반전 켤레복소수 (Conjugate):", c1.conjugate())
# 4. [특급 증명] j 를 4번 곱하면 360도로 회전해서 제자리로 올까?
print("\n--- 허수 j 의 90도 뱅글뱅글 4박자 회전 연산 ---")
print("1j 의 1제곱 (90도 회전):", (1j) ** 1)
print("1j 의 2제곱 (180도 회전):", (1j) ** 2) # 충격! 현실의 음수(-1)로 귀환!
print("1j 의 3제곱 (270도 회전):", (1j) ** 3)
print("1j 의 4제곱 (360도 원점):", (1j) ** 4) # 가짜 숫자가 진짜 1 로 완벽 복귀
출력:
(3+4j) 데이터 타입: <class 'complex'>
덧셈 연산: (4+2j)
곱셈 (2차원 평면의 회전 믹스결과): (11-2j)
--- 객체 속성 추적 ---
실제 세상 부분 (Real): 3.0
상상 세상 부분 (Imaginary): 4.0
거울 반전 (Conjugate): (3-4j)
--- 허수 j 의 90도 뱅글뱅글 4박자 회전 연산 ---
1j 의 1제곱 (90도 회전): 1j
1j 의 2제곱 (180도 회전): (-1+0j)
1j 의 3제곱 (270도 회전): (-0-1j)
1j 의 4제곱 (360도 원점): (1+0j)
4. 🚀 [바이브 코딩] 시각화로 확인하는 복소수 회전 (Matplotlib)
지금까지 배운 복소수의 ‘공간 회전’과 ‘크기 팽창’ 원리를 Vibe Coding(바이브 코딩)을 통해 파이썬 시각화 라이브러리인 matplotlib로 직접 그려봅시다. 1차원의 평범한 수직선에 묶여있던 숫자 $1$이 허수 $j$의 마법 가루를 품고, 어떻게 점차 커지며 2차원 평면을 돌며 나선형(Spiral) 우주 궤도처럼 뻗어나가는지 볼 수 있습니다.
(다이어그램: 현실 세계의 숫자 $1$에서 출발해, 오일러의 마법 파티클(허수 회전 결합)을 50번 반복 곱셈하며 2차원 공간으로 날아가는 궤적 시각화)
아래 코드를 복사하여 Google Colab이나 주피터 노트북에서 실행해 보세요. 아름다운 수학적 기하학 패턴이 바로 모니터에 그려집니다.
import matplotlib.pyplot as plt
# 1. 우리의 시작점: 현실의 수직선 위 숫자 1
z = complex(1, 0)
# 도화지 좌표(X, Y)를 저장할 리스트 준비
real_parts = []
imag_parts = []
# 2. 회전과 팽창을 일으키는 마법의 허수 가루 준비
# (크기를 1.05배씩 키우고, 살짝 각도를 들어 올리며 회전시키는 복소수 비율)
magic_dust = complex(1.05, 0.15)
# 3. 마법을 50번 연속으로 부려봅시다
for _ in range(50):
# 각 지점 좌표 기록
real_parts.append(z.real)
imag_parts.append(z.imag)
# 핵심 원리! 복소수끼리의 곱셈 = 회전(Rotation) + 크기 팽창
z = z * magic_dust
# 4. 파이썬 도화지에 그리기
plt.figure(figsize=(6, 6))
plt.plot(real_parts, imag_parts, marker='o', color='purple', linestyle='-')
# 그리기 꾸미기
plt.title("Complex Space: Rotation & Expansion")
plt.xlabel("Real Axis")
plt.ylabel("Imaginary Axis")
plt.axhline(0, color='gray', linestyle='--')
plt.axvline(0, color='gray', linestyle='--')
plt.grid(True)
plt.show()
5. 코딩 영단어 학습 📝
Complex: 복잡한, 복합적인. 실수(Real)와 거꾸로 도는 상상의 숫자 허수(Imaginary)가 복합적으로 구성되어 만들어진 것을 뜻합니다. 아파트 ‘단지(Complex)’ 건물들이 뒤섞여 합쳐져 모여있는 것처럼 말입니다.Real/Imag: 파이썬 복소수 객체의 내부 속성값 호출 명령어인 실수부(.real)와, 비현실 세계의 허수부 상상 요소(.imag)입니다.Conjugate: 결합하다, 짝지어주다. 분수 거듭제곱을 배울 때 항상 써먹는 켤레 쌍(거울 반전 대칭 형태)을 뜻합니다.