부채 스노우볼 계산기
스노우볼 또는 아발란체 전략으로 부채 상환 계획을 세웁니다.
이 도구 소개
부채 눈덩이 계산기는 눈덩이 또는 아발란체 전략을 사용하여 여러 부채의 전략적 상환 계획을 수립할 수 있도록 도와줍니다. 많은 사람들이 여러 부채를 안고 있으며 큰 총 잔액 앞에서 동기를 유지하기 어려워합니다. 이 도구는 각 부채가 언제 갚아질 것인지, 그리고 최소 상환금 이상으로 추가 상환하여 얼마나 많은 이자를 절약할 수 있는지 보여주는 월별 로드맵을 제공합니다.
계산기를 사용하려면 모든 부채를 현재 잔액, 월 최소 상환금, 금리와 함께 나열하고 월간 총 상환 예산을 설정합니다. 계산기는 선택한 전략에 따라 부채를 재정렬합니다. 눈덩이 방식은 심리적 모멘텀을 위해 가장 작은 잔액을 먼저 우선하고, 아발란체는 총 이자 지급을 최소화하기 위해 가장 높은 금리를 목표로 합니다. 몇 초 내에 완전한 상환 일정, 총 이자, 그리고 갚아진 부채가 다음 대상 부채에 자금을 해제하는 눈덩이 효과의 월별 표시를 얻을 수 있습니다.
눈덩이 방식은 초기 성공이 감정적 모멘텀을 구축하기 때문에 일반적으로 완료율이 높고, 아발란체는 수학적으로 가장 많은 돈을 절약합니다. 동기 부여가 문제라면 눈덩이를 선택하고, 재정에 규율이 있다면 아발란체를 선택하세요. 계산기는 고정 금리와 상환 계획의 엄격한 준수를 가정한다는 점을 기억하세요. 실제로는 새로운 청구나 인생 변화에 맞게 조정해야 할 수 있습니다. 정확한 계약이 아닌 동기 부여 로드맵으로 사용하고, 부채 상황이 압도적이라고 느껴진다면 신용 상담사와의 상담을 고려하세요.
자주 묻는 질문
코드 구현
from dataclasses import dataclass, field
from typing import List, Optional
@dataclass
class Debt:
name: str
balance: float
min_payment: float
apr: float # Annual Percentage Rate e.g. 0.20 for 20%
@property
def monthly_rate(self) -> float:
return self.apr / 12
@dataclass
class PayoffResult:
name: str
months_to_payoff: int
total_paid: float
total_interest: float
def debt_snowball(debts: List[Debt], monthly_budget: float) -> List[PayoffResult]:
"""
Simulate the debt snowball method.
Debts are sorted by balance (smallest first).
Extra budget is applied to the current target debt.
"""
# Sort by balance ascending (snowball)
queue = sorted(debts, key=lambda d: d.balance)
paid = [False] * len(queue)
bals = [d.balance for d in queue]
totals = [0.0] * len(queue) # total paid per debt
month = 0
results = []
while any(not p for p in paid):
month += 1
# Find current target: first unpaid debt
target_idx = next(i for i, p in enumerate(paid) if not p)
# Calculate total minimums for non-target debts
minimums_used = sum(
queue[i].min_payment for i in range(len(queue))
if not paid[i] and i != target_idx
)
extra = monthly_budget - minimums_used
# Apply payments
for i, debt in enumerate(queue):
if paid[i]:
continue
payment = extra if i == target_idx else debt.min_payment
interest = bals[i] * debt.monthly_rate
principal = min(payment - interest, bals[i])
bals[i] -= principal
totals[i] += payment
if bals[i] <= 0.01:
paid[i] = True
results.append(PayoffResult(
name=debt.name,
months_to_payoff=month,
total_paid=totals[i] + bals[i], # adjust overpayment
total_interest=totals[i] - debt.balance
))
return results
# Example
debts = [
Debt("Credit Card A", balance=2500, min_payment=75, apr=0.22),
Debt("Credit Card B", balance=5000, min_payment=100, apr=0.18),
Debt("Car Loan", balance=8000, min_payment=200, apr=0.06),
Debt("Student Loan", balance=15000, min_payment=150, apr=0.05),
]
results = debt_snowball(debts, monthly_budget=700)
total_interest = sum(r.total_interest for r in results)
print("Debt Snowball Payoff Plan:")
print(f"{'Debt':<20} {'Months':>7} {'Interest Paid':>14}")
for r in results:
yrs = r.months_to_payoff // 12
mos = r.months_to_payoff % 12
print(f"{r.name:<20} {yrs}y {mos:02d}m ${r.total_interest:>12,.2f}")
print(f"{'Total interest:':<20} ${total_interest:>12,.2f}")
Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.