40대 비전공자 직장인의 파이썬 독학기 5편: 엑셀 사용자 정의 함수(VBA)보다 쉬운 파이썬 함수(def) 만들기

엑셀을 쓰다 보면 매번 똑같은 수식을 반복 입력하거나, =SUM, =VLOOKUP 같은 기본 함수만으로는 처리가 어려워 복잡한 수식을 복사해 붙여넣는 경우가 많습니다.

이를 해결하기 위해 엑셀에서는 ‘VBA 매크로’를 켜서 ‘사용자 정의 함수’를 만들곤 하지만, 코드가 복잡하고 파일 용량이 커지며 보안 경고창이 뜨는 등 번거로운 점이 한둘이 아닙니다.

파이썬에서는 내가 자주 쓰는 계산 공식이나 데이터 가공 규칙을 단 몇 줄로 묶어 나만의 ‘전용 명령어’로 만들 수 있습니다. 이것이 바로 ‘함수(Function)’입니다.

40대 비전공자 직장인의 실무 눈높이에 맞춰, 복잡한 공식 복붙을 끝내는 파이썬 def 함수의 기초를 명쾌하게 정리해 드립니다.

1. 함수(Function)란? 원자재를 넣으면 완제품이 나오는 ‘자판기’

함수는 거창한 것이 아닙니다.

  1. 동전과 음료 번호(입력값 / 매개변수)를 넣으면,
  2. 자판기 내부(함수 본문)에서 정해진 동작을 거쳐,
  3. 시원한 음료수(결과값 / 반환값)를 밖으로 내보내는 기계와 같습니다.

엑셀의 =SUM(A1:A10)도 내부적으로는 “선택된 범위의 숫자를 모두 더해서 결과를 뱉어내라”는 기능이 미리 조립된 함수입니다. 파이썬에서는 이 자판기를 우리가 직접 조립할 수 있습니다.

파이썬 함수의 입력값, 처리, 반환값 구조도
함수는 입력 데이터를 받아 정해진 규칙대로 가공한 뒤 결과물을 반환하는 자판기 구조입니다.

2. 파이썬 함수 정의 문법: defreturn

파이썬에서 함수를 만들 때는 “정의하다(Define)”의 약자인 def 키워드를 사용합니다.

Python

# 함수 정의하기 (자판기 만들기)
def calculate_vat(price):
    vat = price * 0.1
    return vat  # 계산 결과를 돌려줌 (반환)

# 함수 사용하기 (자판기 버튼 누르기)
result = calculate_vat(50000)
print(f"부가세 금액: {int(result):,}원")  # 출력: 부가세 금액: 5,000원
  • def 함수이름(재료):: 새로운 명령어의 이름과 필요한 입력값(매개변수)을 선언합니다. 끝에는 반드시 콜론(:)을 붙입니다.
  • 들여쓰기: 함수 안에서 실행할 계산식을 안쪽으로 들여씁니다.
  • return 결과값: 계산된 최종 결과를 함수 밖으로 전달합니다.

파이썬 def 함수 정의 및 return 반환문 작성 화면
def로 함수를 선언하고 return으로 계산 결과를 넘겨받아 변수에 저장합니다.

3. 초보자가 가장 많이 헷갈리는 print() vs return 차이

처음 함수를 배울 때 가장 흔히 저지르는 실수가 return 대신 print()를 쓰는 것입니다.

  • print(): 모니터 화면에 글자를 단순히 ‘보여주기’만 하고 끝납니다. (엑셀 화면에 메모만 띄운 상태)
  • return: 계산된 결괏값을 다음 수식이나 변수에 ‘전달’하여 재사용할 수 있게 합니다. (엑셀 셀에 실제 수식 결과가 남는 상태)

실무 자동화 코드에서는 다음 단계(엑셀 파일 저장, 이메일 발송 등)로 데이터를 넘겨야 하므로 반드시 return을 사용해야 합니다.

4. 실전 종합: 실무형 급여 및 원천징수 세금 계산 함수 만들기

실제 회사 업무에서 자주 쓰는 “지급액 입력 시 3.3% 원천징수 세금 및 실지급액 계산기” 함수를 만들어 보겠습니다.

Python

def calculate_freelancer_pay(name, total_pay):
    # 1. 3.3% 사업소득세 및 주민세 계산
    income_tax = total_pay * 0.03       # 사업소득세 3%
    resident_tax = total_pay * 0.003   # 지방소득세 0.3%
    total_tax = income_tax + resident_tax
    
    # 2. 실지급액(차인지급액) 계산
    net_pay = total_pay - total_tax
    
    # 3. 딕셔너리 형태로 결과 묶어서 반환
    return {
        "이름": name,
        "총지급액": int(total_pay),
        "공제세금": int(total_tax),
        "실지급액": int(net_pay)
    }

# 함수 호출 테스트
worker_a = calculate_freelancer_pay("김철수", 3500000)
worker_b = calculate_freelancer_pay("이영희", 4200000)

print(f"[{worker_a['이름']}] 실지급액: {worker_a['실지급액']:,}원 (공제: {worker_a['공제세금']:,}원)")
print(f"[{worker_b['이름']}] 실지급액: {worker_b['실지급액']:,}원 (공제: {worker_b['공제세금']:,}원)")

실행 결과

Plaintext

[김철수] 실지급액: 3,384,500원 (공제: 115,500원)
[이영희] 실지급액: 4,061,400원 (공제: 138,600원)

복잡한 세금 계산 로직을 함수 하나(calculate_freelancer_pay)로 정의해 두면, 직원이 100명이든 1,000명이든 이름과 금액만 넣어 손쉽게 계산할 수 있습니다. 4편에서 배운 for 반복문과 결합하면 엑셀 대량 정산이 1초 만에 끝납니다.

파이썬 급여 계산 함수 실행 및 터미널 출력 결과
함수를 정의해 두면 반복되는 복잡한 업무 수식을 한 번의 호출로 깔끔하게 처리할 수 있습니다.

40대 직장인을 위한 실무 요약

  • def 함수이름(매개변수):: 나만의 업무 공식(자판기) 만들기
  • 들여쓰기(Tab): 함수에 포함될 계산식 블록 지정
  • return: 계산된 완제품 데이터를 밖으로 돌려주는 핵심 키워드
  • 함수화의 장점: 수식이 변경되어도 함수 내부의 계산식 1줄만 수정하면 전체 코드에 일괄 적용됨

자주 묻는 질문 (FAQ)

Q1. 매개변수(입력값)가 없는 함수도 만들 수 있나요?

  • A. 네, 가능합니다. 괄호 안을 비워두고 def print_company_rules(): 형태로 만들면, 매번 동일한 고정 문구나 구분선을 출력할 때 유용하게 쓸 수 있습니다.

Q2. 함수 안에서 만든 변수를 함수 밖에서 바로 쓸 수 있나요?

  • A. 불가능합니다. 함수 내부에서 만들어진 변수는 ‘지역 변수(Local Variable)’라고 부르며, 함수 실행이 끝나면 사라집니다. 함수 내부의 결과를 밖에서 쓰려면 반드시 return으로 넘겨받아야 합니다.

Q3. 엑셀의 여러 개 수식을 함수 하나로 통합할 수 있나요?

  • A. 네. 엑셀에서는 여러 열에 걸쳐 단계별로 계산해야 했던 작업도 파이썬 함수 내부에서는 하나의 파이프라인으로 묶어 최종 결과만 도출할 수 있습니다.

▶ Next Step · 파이썬 독학기 6편

실전 업무 자동화의 시작! 파이썬으로 엑셀(.xlsx) 파일 열고 데이터 자동 입력·저장하기

👉 6편: openpyxl로 실제 엑셀 파일 읽고 쓰기 자동화 보러가기 →

댓글 남기기