
1. 개요
대부분의 웹 개발이나 데이터 처리에서는 정수와 실수만으로 충분합니다. 하지만 파이썬이 '과학 및 공학용 언어'로 불리는 이유 중 하나는 복소수(Complex Number)를 기본 자료형으로 지원하기 때문입니다.
복소수란?
실수(Real Number)와 허수(Imaginary Number)가 합쳐진 수로, 보통 $a + bi$ 형태로 표현합니다. 여기서 $i$는 제곱해서 -1이 되는 수(허수 단위)를 뜻합니다. 실수가 수직선 위의 점이라면, 복소수는 2차원 평면 위의 점을 나타낼 수 있어 기하학이나 물리 계산에 필수적입니다.
허수 i 대신 j를 사용하는 파이썬의 독특한 문법부터, 복소수의 사칙연산이 실제로 어디에 쓰이는지 가볍게 살펴봅니다.
2. 간단한 설명
수학에서는 허수 단위를 $i$로 표기하지만, 파이썬(그리고 전기공학)에서는 $j$를 사용합니다. $i$는 전류(current) 기호와 헷갈리기 때문이라는 설이 유력합니다.
사용법은 직관적입니다. 실수부와 허수부를 붙여 쓰거나 complex() 함수를 사용합니다.
z1 = 3 + 4j
z2 = 1 - 2j
print(z1 / z2)
# 결과: (-1+2j)
# 자동으로 켤레복소수를 이용한 나눗셈 수행파이썬은 복소수 나눗셈 시 분모의 실수화(Rationalization) 과정을 내부적으로 알아서 처리해 줍니다. 개발자는 복잡한 수식을 구현할 필요 없이 / 연산자 하나만 쓰면 됩니다.
3. 사용 사례
"이걸 도대체 어디다 써?"라고 하실 수 있지만, 공학 분야에서는 없어서는 안 될 기능입니다.
사례: 2D 회전 변환 (게임 수학)
복소수 평면은 2차원 좌표 평면과 매우 유사합니다. 특히 회전 이동을 구현할 때 삼각함수(sin, cos)를 직접 쓰는 것보다 복소수 곱셈이 훨씬 간결할 때가 있습니다.
[Before] 삼각함수로 90도 회전
$(x, y)$ 좌표를 90도 회전시키려면:
$$x' = x \cos(90^\circ) - y \sin(90^\circ)$$
$$y' = x \sin(90^\circ) + y \cos(90^\circ)$$
코드로 옮기면 꽤 깁니다.
[After] 복소수 곱셈으로 회전
복소수 $j$를 곱하는 것은 복소평면에서 90도 회전을 의미합니다.
point = 3 + 2j # 좌표 (3, 2)
rotation = 1j # 90도 회전
new_point = point * rotation
print(new_point)
# 결과: (-2+3j) -> 좌표 (-2, 3)수학적 원리를 알면 복잡한 행렬 연산 없이도 2D 변환을 직관적으로 처리할 수 있습니다.
사례: 교류 회로 분석 (전기공학)
전기공학에서 임피던스(Impedance)나 전압(Voltage)을 계산할 때 복소수는 필수입니다.
저항(Resistance)은 실수부로, 리액턴스(Reactance)는 허수부로 표현됩니다.
V = I * Z (옴의 법칙) 계산을 파이썬으로 하면 다음과 같습니다.
current = 3 + 4j # 전류 I (3A와 위상각)
impedance = 5 + 2j # 임피던스 Z (5Ω 저항 + 2j 리액턴스)
voltage = current * impedance
print(f"전압: {voltage} V")
# 결과: 전압: (7+26j) V위상각(Phase Angle) 계산이 복잡한 교류 회로 해석도 파이썬의 기본 complex 자료형을 쓰면 단순 산수처럼 풀립니다.
사례: 핀테크 (금융 모델링 심화)
금융 공학의 꽃이라 불리는 블랙-숄즈 모형(Black-숄즈 Model) 같은 파생상품 가격 결정 공식에서도 복소수가 등장합니다.
물론 우리가 직접 공식을 짤 일은 드물겠지만, "미분방정식을 풀기 위해 허수 공간을 잠시 빌려 쓴다"는 개념만 알아두셔도 충분합니다.
사례: 데이터 시각화 (오디오 분석)
오디오 데이터 시각화 기능을 구현할 때도 복소수가 핵심입니다. 소리를 주파수 별로 쪼개는 고속 푸리에 변환(FFT)의 결과가 바로 복소수이기 때문입니다.
수학적으로는 매우 복잡하지만, 파이썬 라이브러리를 쓰면 간단합니다.
# (예시) 소리 데이터의 주파수 분석 원리
import cmath
signal = [1.0, 0.5, 0.2, 0.5] # 1초 동안의 소리 데이터
# 푸리에 변환 (개념 이해용 코드)
# 실무에서는 numpy.fft.fft() 한 줄이면 끝납니다!
spectrum = []
N = len(signal)
for k in range(N):
value = 0
for n in range(N):
angle = -2j * cmath.pi * k * n / N
value += signal[n] * cmath.exp(angle)
spectrum.append(value)
print(spectrum[1])
# 결과: (0.8-0.5j)
# 이 복소수 숫자 하나에 '소리의 크기(진폭)'와 '타이밍(위상)' 정보가 압축되어 있습니다.이처럼 파이썬으로 복잡한 수리 모델링이나 신호 처리 서버를 구축한다면 복소수는 유용한 개념입니다.
4. 맺음말
파이썬의 복소수 지원은 이 언어의 태생이 단순한 스크립팅을 넘어 과학 계산을 지향했음을 보여줍니다.
전기 회로, 신호 처리, 혹은 2D 기하학 문제가 닥쳤을 때 "아, 파이썬은 복소수 계산이 됐었지!" 하고 떠올릴 수 있다면, 남들보다 훨씬 깔끔한 해결책을 찾을 수 있을 것입니다.
'프로그래밍 PROGRAMMING > 파이썬 PYTHON' 카테고리의 다른 글
| [PYTHON] 파이썬 음수 나눗셈의 비밀: // 연산자가 C언어와 다른 이유 (0) | 2026.01.26 |
|---|---|
| [PYTHON] 파이썬 부동소수점 오차 해결 (0) | 2026.01.23 |
| [PYTHON] 파이썬 반올림, 올림, 내림 정복하기: round()의 함정과 math 모듈 (0) | 2026.01.21 |
| [PYTHON] 파이썬 무한 정수와 나눗셈: 큰 수 연산은 얼마나 느릴까? (0) | 2026.01.19 |
| [PYTHON] 파이썬 나머지 연산자(%) 활용 : 홀짝 판별부터 순환 알고리즘 (0) | 2026.01.18 |