안녕하세요, 함께 공부하며 성장하는 느종입니다!
벌써 2026년 2월이 지나가고 있습니다. 2026 연말정산을 슬슬 고민해야 할 시기가 다가오고 있습니다. 직장인들에게 ’13월의 월급’만큼 중요한 것도 없죠. 특히 이번 2026 연말정산은 소득공제 체계에 몇 가지 중요한 변화가 있었습니다. 자녀 수에 따른 공제 한도가 세분화되어 상향되었고, 많은 분이 기다리셨던 체력단련장(헬스장, 수영장) 이용료가 문화비 항목에 새롭게 포함되었습니다.

오늘은 이렇게 달라진 2026 연말정산 개정안을 바탕으로, 나만의 카드 소득공제 계산기를 자바스크립트로 직접 구현해 보려고 합니다. 복잡한 세법을 코드로 정리하며 2026 연말정산을 미리 완벽하게 대비해 볼까요?
2026년 개정 세법, 무엇이 달라졌을까?
계산기를 코딩하기 전, 먼저 우리가 구현해야 할 로직의 근거인 ‘세법’을 명확히 파악해야 합니다. 2026년 기준으로 핵심이 되는 규칙은 다음과 같습니다.
- 공제 문턱: 총급여액의 25%를 초과하여 사용한 금액부터 공제가 시작됩니다.
- 수단별 공제율:
- 신용카드: 15%
- 현금영수증·체크카드: 30%
- 전통시장·대중교통: 40%
- 도서·공연·박물관·미술관(신규: 헬스장 포함): 30%
- 신용카드: 15%
- 한도의 변화(중요!): 기존에는 총급여 7,000만 원 이하 기준 300만 원이 기본 한도였으나, 2026년부터는 자녀 수에 따라 한도가 차등 상향됩니다. (1자녀 350만 원, 2자녀 이상 400만 원 등)
이 복잡한 조건들을 if-else 문으로만 처리하려다 보면 코드가 스파게티처럼 꼬이기 십상입니다. 저는 이번 프로젝트에서 객체 매핑(Object Mapping) 기술을 활용해 이를 해결해 보았습니다.
핵심 로직 설계: 복잡한 수식을 코드로 치환하기
가장 먼저 해결해야 할 문제는 “어떤 카드 사용분부터 25% 문턱을 넘길 것인가”입니다. 일반적으로 사용자에게 가장 유리하도록 공제율이 낮은 신용카드 사용액부터 먼저 25%를 차감하는 것이 정석입니다.
공제액 계산의 기본 원리는 다음과 같습니다:
여기서 는 총급여의 25%에 해당하는 금액을 공제율이 낮은 순서대로 적용하여 제외한 값입니다.
구현 중 겪은 고민: 자녀 수에 따른 동적 한도 설정
처음에는 단순히 limit = 3000000으로 변수를 선언했으나, 2026 연말정산 개정안을 반영하려니 자녀 수 입력을 받아야 했습니다. 저는 이를 위해 별도의 DEDUCTION_LIMITS 객체를 만들어 관리하기로 했습니다. 이렇게 하면 나중에 세법이 또 바뀌더라도 숫자만 수정하면 되니까요.
연말정산 계산기 사용해보기
📅 2026 연말정산 계산기
Note: 계산기 결과값이 만족스럽지 않다면, 사용 수단을 변경해 보세요. 총급여의 25%를 채울 때까지는 혜택이 많은 신용카드를, 그 이후부터는 공제율이 2배인 체크카드를 사용하는 로직을 머릿속에 시뮬레이션해 보는 것이 좋습니다.
자바스크립트 실전 코드 구현
이제 실제 핵심 로직인 calculate2026Deduction 함수를 작성해 보겠습니다. 가독성을 위해 불필요한 DOM 조작 코드는 생략하고 계산 로직에 집중했습니다.
/**
* 2026 연말정산 카드 소득공제 계산 엔진
* @param {Object} data - 사용자의 급여 및 소비 데이터
*/
function calculate2026Deduction(data) {
const { totalSalary, creditCard, checkCard, culturePay, childrenCount } = data;
// 1. 공제 문턱 계산 (총급여의 25%)
const threshold = totalSalary * 0.25;
let totalUsage = creditCard + checkCard + culturePay;
if (totalUsage <= threshold) {
return 0; // 문턱을 못 넘으면 공제액은 0원입니다.
}
// 2. 자녀 수에 따른 2026년 가산 한도 설정
let baseLimit = 3000000;
if (childrenCount === 1) baseLimit = 3500000;
else if (childrenCount >= 2) baseLimit = 4000000;
// 3. 공제액 계산 (신용카드부터 문턱에서 차감하는 로직)
let remainingThreshold = threshold;
let finalDeduction = 0;
// 신용카드(15%) 적용
const creditAfterThreshold = Math.max(0, creditCard - remainingThreshold);
remainingThreshold = Math.max(0, remainingThreshold - creditCard);
finalDeduction += creditAfterThreshold * 0.15;
// 체크카드/현금영수증(30%) 적용
const checkAfterThreshold = Math.max(0, checkCard - remainingThreshold);
remainingThreshold = Math.max(0, remainingThreshold - checkCard);
finalDeduction += checkAfterThreshold * 0.30;
// 문화비/헬스장(30%) 적용 - 총급여 7천 이하만 해당
if (totalSalary <= 70000000) {
const cultureAfterThreshold = Math.max(0, culturePay - remainingThreshold);
finalDeduction += cultureAfterThreshold * 0.30;
}
// 4. 최종 한도 적용 및 원 단위 절삭
const result = Math.min(finalDeduction, baseLimit);
return Math.floor(result);
}
// 실전 테스트
const myData = {
totalSalary: 50000000,
creditCard: 15000000,
checkCard: 10000000,
culturePay: 2000000, // 헬스장 이용료 포함
childrenCount: 2 // 2자녀 가산 한도 적용
};
console.log(`최종 공제 금액: ${calculate2026Deduction(myData).toLocaleString()}원`);
시행착오와 해결 방법
코드를 짜면서 가장 헷갈렸던 부분은 '문화비 공제'의 범위였습니다. 2026년부터 헬스장이 포함된다는 소식에 단순히 모든 결제액을 더하려고 했으나, 문화비는 총급여 7,000만 원 이하인 경우에만 별도 한도가 부여된다는 점을 놓칠 뻔했습니다. if (totalSalary <= 70000000) 조건을 추가하여 이 예외 상황을 해결했습니다. 저는 이번 프로젝트에서 culturePay라는 하나의 변수로 통합하되, 주석을 통해 헬스장 결제 내역이 포함됨을 명시했습니다. 만약 더 정밀한 계산기를 만든다면 isGymMembership: boolean 타입을 추가해 볼 수도 있겠죠. 또한, 소수점이 발생하는 퍼센트 연산 특성상 Math.floor를 마지막에 사용하여 정확한 원 단위 금액을 산출하도록 구성했습니다. 세금 계산에서 1원이라도 오차가 생기면 신뢰도가 떨어집니다. 자바스크립트의 Number 자료형은 부동 소수점 방식을 사용하기 때문에, 퍼센트() 연산 후에는 반드시 Math.floor()나 Math.trunc()를 통해 원 단위 이하를 버려주는 과정이 필수적입니다.
오늘은 자바스크립트를 이용해 2026년 최신 개정판 카드 소득공제 계산기를 만들어 보았습니다. 단순히 숫자를 입력하는 계산기를 넘어, 그 안에 담긴 세법의 원리를 코드로 풀어보니 연말정산이 한결 가깝게 느껴지지 않나요?
프로그래밍의 매력은 이처럼 실생활의 복잡한 규칙을 논리적인 흐름으로 정리할 수 있다는 데 있는 것 같습니다. 여러분도 이번 기회에 본인의 소비 패턴을 변수에 넣어보며 내년 초 '환급금 대박'을 미리 점쳐보시길 바랍니다!
기존에 작성했던 2026 연봉 실수령액 계산기 포스팅과 함께 보시면 본인의 전체적인 세무 설계를 하는 데 더 큰 도움이 되실 겁니다.
궁금한 점이나 코드에서 수정이 필요한 부분이 있다면 언제든 댓글로 소통해 주세요. 오늘도 즐거운 코딩 하시길 바랍니다!