Phase 1 · 파이썬 기초

함수 — 프로그램을 업무 단위로 나누기

복잡해진 코드를 "기능별 블록(def)"으로 나누고 조립하는 방법을 배웁니다.
데이터를 받아(매개변수) 처리한 뒤, 결과를 돌려주는(return) 프로그램 설계의 핵심입니다.

예상 학습 시간 : 120분
난이도 : ★★★☆☆
사전 단계 : Step 05 자료구조
다음 단계 : 파일 입출력
01

학습 목표

  • 함수의 필요성을 이해한다.
  • def를 이용해 함수를 만들고(정의), 호출할 수 있다.
  • 매개변수(parameter)로 데이터를 전달할 수 있다.
  • 반환값(return)을 사용해 계산 결과를 돌려받을 수 있다.
  • 기본값 매개변수와 지역변수/전역변수의 개념을 이해한다.
  • 실제 업무 프로그램 코드를 함수 단위로 깔끔하게 리팩토링(재설계) 할 수 있다.
02

함수란? (구조와 호출)

함수(Function)는 반복해서 사용하는 코드를 하나의 기능으로 묶어 이름을 붙이는 것입니다.

1. 함수 만들기 (정의, define)
def hello():
    print("안녕하세요.")
    print("파이썬 공부를 시작합니다.")

만들기만 해서는 실행되지 않습니다.

2. 함수 사용하기 (호출, call)
hello()
hello()

이름을 부르면 내부 코드가 실행됩니다.
언제든 재사용할 수 있습니다.

03

매개변수 (데이터 전달)

함수가 일하게 하려면 재료(데이터)를 넘겨주어야 합니다. 이를 매개변수(parameter)라고 합니다.

🐍 2개의 매개변수 받기
def add(a, b):
    print(a + b)

# 호출할 때 값 2개를 전달
add(10, 20)  # a=10, b=20 이 됩니다.
▶ 실행 결과
30
04

반환값 return (가장 중요한 개념)

return은 함수가 계산한 결과를 호출한 곳으로 돌려주는 역할을 합니다.

🐍 return 으로 값 돌려주기
def calculate_tax(amount):
    return amount * 0.1

# 계산된 결과를 tax 변수에 저장할 수 있습니다.
supply = 10000000
tax = calculate_tax(supply)

print(f"부가세: {tax:,.0f}원")
여러 개의 값 반환하기

파이썬은 콤마(,)를 사용해 여러 값을 동시에 반환할 수 있습니다.

return tax, total
# 받을 때도 두 변수로 받습니다.
tax, total = calculate_total(10000000)
05

print() 와 return 의 차이 (초보자 주의!)

초보자가 가장 많이 헷갈리는 부분입니다. 업무 자동화에서는 화면에 보여주는 print보다, 결과 데이터를 다음 코드에 넘겨주는 return이 훨씬 중요합니다.

print (화면에 보여주고 끝)
def add(a, b):
    print(a + b)

result = add(10, 20)
# result에는 값이 없습니다 (None).
# 다음 계산에 쓸 수 없습니다.
return (결과를 돌려줌)
def add(a, b):
    return a + b

result = add(10, 20)
# result에 30이 저장됩니다.
# 이 값으로 다음 계산을 할 수 있습니다.
06

함수 + 조건/반복문 결합

함수 안에 if문이나 for문을 넣어 업무 규칙을 통째로 묶을 수 있습니다.

🐍 업무 규칙을 함수로 묶기
def get_customer_grade(amount):
    if amount >= 50000000:
        return "A"
    elif amount >= 10000000:
        return "B"
    else:
        return "C"

grade = get_customer_grade(25000000)
print(grade)  # B 출력
07

파이썬 내장 함수 (sum, max, min)

우리가 직접 def로 만들지 않아도, 파이썬이 통계 분석용으로 미리 만들어둔 강력한 함수들이 있습니다.

amounts = [1000000, 5000000, 3000000]

print(sum(amounts))   # 9000000 (합계)
print(max(amounts))   # 5000000 (최댓값)
print(min(amounts))   # 1000000 (최솟값)
print(sum(amounts) / len(amounts))  # 3000000 (평균)
08

기본값 매개변수와 키워드 인수

매개변수에 미리 기본값을 지정해두면, 값을 넘기지 않아도 에러 없이 기본값으로 작동합니다.

🐍 세율 기본값 설정 (rate=0.1)
def calculate_tax(amount, rate=0.1):
    return amount * rate

# 1. rate를 안 넘기면 기본값 10% 적용
print(calculate_tax(10000000))       # 1000000

# 2. rate를 넘기면 넘긴 값(20%) 적용
print(calculate_tax(10000000, 0.2))  # 2000000

# 3. 키워드 인수 (이름을 지정해서 넘기면 가독성 상승)
print(calculate_tax(amount=10000000, rate=0.1))
09

지역변수(Local)와 전역변수(Global)

함수 안에서 만든 변수는 지역변수이므로, 함수가 끝나면 메모리에서 사라져 밖에서 쓸 수 없습니다.

초보자 흔한 에러 (NameError)
def test():
    value = 100

test()
print(value) # 에러 발생! value는 함수 안에서만 살아있습니다.

해결책: 데이터를 함수에 넘길 때는 매개변수를 쓰고, 결과를 받을 때는 return을 쓰면 완벽하게 해결됩니다.

10

실습 — 5단계 거래처 관리 리팩토링

5단계에서 만든 코드는 모든 로직이 while문 안에 섞여 있었습니다. 이를 함수로 분리하여 메인 로직을 단순화(설계) 해보겠습니다.

메인 프로그램 (while True)
add_customer()
거래처 등록
show_customers()
거래처 목록
search_customer()
거래처 검색
calculate_total()
통계 계산
🐍 깔끔해진 메인 루프 (Main Loop)
# 함수 정의 부분 생략 (add_customer, show_customers 등)

customers = []

while True:
    print("1. 등록 | 2. 목록 | 3. 검색 | 4. 종료")
    menu = input("선택: ")

    if menu == "1":
        add_customer(customers)       # ⬅ 함수 호출로 대체!
    elif menu == "2":
        show_customers(customers)
    elif menu == "3":
        search_customer(customers)
    elif menu == "4":
        break

코드의 가독성이 비약적으로 상승하며, 오류가 났을 때 해당 함수만 찾아가면 되므로 유지보수가 매우 쉬워집니다.

11

종합 실습 — 회계 거래 분석 프로그램

회계 로직을 함수로 추상화하는 가장 좋은 예시입니다.

📊
데이터 분석 프로젝트
회계 거래 분석 모듈화
# 1. 업무 규칙을 함수로 정의 (도구 만들기)

def calculate_vat(amount):
    return amount * 0.1

def get_review_grade(amount):
    if amount >= 50000000: return "고액검토"
    elif amount >= 10000000: return "중요검토"
    else: return "일반"

# 2. 데이터 준비
transactions = [
    {"customer": "ABC상사", "amount": 5000000},
    {"customer": "GHI상사", "amount": 80000000}
]

# 3. 데이터 처리 (만들어둔 함수 호출)
for t in transactions:
    amt = t["amount"]
    vat = calculate_vat(amt)
    grade = get_review_grade(amt)
    
    print(f"{t['customer']} | 부가세: {vat:,.0f} | 등급: {grade}")
12

1~6단계 핵심 요약 및 패러다임의 변화

1단계부터 5단계까지는 "파이썬 문법을 어떻게 사용하는가?"를 배웠다면,
6단계부터는 "프로그램을 어떻게 설계하는가?"로 관점이 변합니다.

def func()
함수 만들기 (정의)
func(data)
재료 전달 (매개변수)
return result
결과 반환 (다음 작업용)
13

과제 & 다음 단계 예고

과제 1 — 사칙연산 함수 만들기

add(a, b), subtract(a, b), multiply(a, b), divide(a, b) 함수를 각각 만들고, 두 숫자를 넘겨 `return`으로 계산 결과를 돌려받아 보세요.

과제 2 — 회계 거래 분석 프로그램 (함수화)

본문의 종합 실습을 참고하여 거래자료 등록, 목록 조회, 합계, 부가세 계산 등을 모두 개별 함수로 쪼개고 while True: 로 메뉴를 만들어 동작시켜 보세요.

다음 단계 예고 — Step 07: 파일 입출력 (File I/O)

지금까지 우리가 입력한 수십 개의 거래처 데이터는 프로그램이 꺼지면(재실행하면) 모두 날아갑니다. 메모리에만 저장했기 때문입니다.
다음 7단계에서는 드디어 파일 열기/쓰기/읽기(CSV, 텍스트)를 배웁니다.
파이썬이 엑셀 파일을 읽어와 분석하고 결과를 새 파일로 저장하는 진정한 실무 자동화의 시작입니다.

1단계 — print() · 실행 순서 ✓ 완료
2단계 — 변수 · 자료형 · input() ✓ 완료
3단계 — 조건문 if · elif · else ✓ 완료
4단계 — 반복문 — for · while ✓ 완료
5단계 — 자료구조 — 리스트 · 딕셔너리 ✓ 완료
6단계 — 함수 — 모듈화와 재사용 현재 단계
7단계 ★ — 파일 처리 — CSV·텍스트 읽고 쓰기
8단계 — 날짜 처리 — datetime 실무
Step 05 : 자료구조 Step 07 : 파일 입출력