콘텐츠로 이동

5장: 함수 — 코드를 묶어서 이름 붙이기

함수란?

함수(function)는 코드 묶음에 이름을 붙인 것입니다.
같은 작업을 여러 번 해야 할 때, 코드를 반복하지 않고 한 번 정의해서 여러 번 호출합니다.

수학 함수와 파이썬 함수

수학에서 f(x) = 2x 는 "x를 받아서 2배를 돌려준다"는 규칙입니다.

def f(x):
    return x * 2

print(f(3))   # 6
print(f(10))  # 20

함수를 한 번 정의하면 몇 번이든 호출할 수 있습니다.

우리가 이미 쓰던 함수들 — 내장 함수

파이썬에는 처음부터 준비된 내장 함수(built-in functions)가 있습니다.
설치도, import도 필요 없이 바로 씁니다.

print(abs(-5))          # 5
print(len("Python"))    # 6
print(min(3, 1, 4))     # 1
print(max(3, 1, 4))     # 4
print(int("42"))        # 42
print(str(3.14))        # 3.14
print(float("2.5"))     # 2.5
print(list(range(3)))   # [0, 1, 2]

함수의 세 가지 종류

종류 설명 사용법
내장 함수 파이썬에 기본 포함 그냥 사용
표준 라이브러리 파이썬 설치 시 함께 포함 import 후 사용
외부 라이브러리 별도 설치 필요 pip installimport
사용자 정의 직접 만든 함수 def로 정의 후 호출

모듈 — import로 불러오기

표준 라이브러리 함수는 import로 불러와야 합니다.

import math
print(math.sqrt(16))    # 4.0
print(math.pi)          # 3.141592653589793

import random
print(random.randint(1, 6))    # 1~6 사이 정수 (주사위)

import 세 가지 방식

import math                  # 모듈 전체 불러오기
print(math.sqrt(9))          # → 모듈명.함수명()

from math import sqrt        # 특정 함수만 불러오기
print(sqrt(9))               # → 함수명()만으로 사용

import math as m             # 별칭 붙이기
print(m.sqrt(9))             # → 별칭.함수명()

함수 정의하기 — def

def 함수이름(매개변수):
    실행할 코드
    return 반환값
def greet(name):
    return "안녕, " + name + "!"

result = greet("지민")
print(result)    # 안녕, 지민!

DRY 원칙 — 반복하지 마라

# 나쁜 예: 같은 코드가 반복됨
print("환영합니다, 지민님!")
print("환영합니다, 수지님!")
print("환영합니다, 태민님!")

# 좋은 예: 함수로 묶음
def welcome(name):
    print(f"환영합니다, {name}님!")

welcome("지민")
welcome("수지")
welcome("태민")

DRY = Don't Repeat Yourself — 같은 코드를 두 번 쓰지 마세요.

함수 실행 과정

함수가 호출될 때 파이썬은 4단계를 거칩니다.

1. 인수(argument) 평가
2. 새 네임스페이스(namespace) 생성
3. 매개변수에 값 전달
4. 함수 본문 실행
def add(a, b):
    total = a + b
    return total

result = add(3, 5)
print(result)    # 8
호출: add(3, 5)
  → a = 3, b = 5  (새 네임스페이스)
  → total = 8
  → return 8
result = 8

지역 변수와 전역 변수 — 스코프

함수 안에서 만든 변수는 함수 밖에서 보이지 않습니다.

x = 10      # 전역 변수 (global)

def f():
    y = 20  # 지역 변수 (local)
    print(x)    # 전역 변수는 함수 안에서 읽을 수 있음
    print(y)

f()
# print(y)    # 오류! y는 함수 밖에서 접근 불가
10
20
지역 변수 전역 변수
정의 위치 함수 안 함수 밖
접근 범위 해당 함수 안에서만 어디서든 읽기 가능
생존 시간 함수 실행 중에만 프로그램이 끝날 때까지

global 키워드

함수 안에서 전역 변수를 수정하려면 global을 선언해야 합니다.

count = 0

def increment():
    global count    # count는 전역 변수임을 선언
    count += 1

increment()
increment()
print(count)    # 2

global 없이 수정하면 UnboundLocalError가 발생합니다.

count = 0

def bad_increment():
    count += 1    # 오류! local variable referenced before assignment

bad_increment()

return값이 없을 때 — None

return을 쓰지 않거나 return만 쓰면 함수는 None을 반환합니다.

def say_hello():
    print("Hello!")

result = say_hello()
print(result)    # None
Hello!
None

None은 "아무것도 없음"을 나타내는 파이썬의 특별한 값입니다.

print(type(None))    # <class 'NoneType'>
print(None == 0)     # False
print(None == "")    # False

매개변수와 인수

용어 위치 예시
매개변수(parameter) 함수 정의 def greet(name):name
인수(argument) 함수 호출 greet("Alice")"Alice"
def bmi(height, weight):           # height, weight: 매개변수
    return weight / (height ** 2)

result = bmi(1.70, 80)             # 1.70, 80: 인수
print(round(result, 1))            # 27.7

기본값(default value)

매개변수에 기본값을 줄 수 있습니다.

def greet(name, lang="ko"):
    if lang == "ko":
        return f"안녕, {name}!"
    else:
        return f"Hello, {name}!"

print(greet("지민"))            # 안녕, 지민!  (lang 생략 → 기본값 "ko")
print(greet("Alice", "en"))    # Hello, Alice!

실습 미션

미션 1: 섭씨 ↔ 화씨 변환

def celsius_to_fahrenheit(c):
    # 공식: F = C × 9/5 + 32
    pass

def fahrenheit_to_celsius(f):
    # 공식: C = (F - 32) × 5/9
    pass

print(celsius_to_fahrenheit(0))     # 32.0
print(celsius_to_fahrenheit(100))   # 212.0
print(fahrenheit_to_celsius(98.6))  # 37.0

미션 2: 최대공약수 (GCD)

def gcd(a, b):
    # 유클리드 알고리즘으로 최대공약수를 구하세요
    # while b != 0:
    #     a, b = b, a % b
    pass

print(gcd(48, 18))    # 6
print(gcd(100, 75))   # 25

미션 3: 숫자 유효성 검사

def is_valid_score(score):
    # 0~100 사이이면 True, 아니면 False를 반환하세요
    pass

print(is_valid_score(85))    # True
print(is_valid_score(-1))    # False
print(is_valid_score(101))   # False

미션 4: 여러 값 반환

import math

def circle_info(r):
    # 반지름 r을 받아 (둘레, 넓이)를 tuple로 반환하세요
    # 둘레 = 2πr,  넓이 = πr²
    pass

circumference, area = circle_info(5)
print(round(circumference, 2))    # 31.42
print(round(area, 2))             # 78.54

미션 5 (심화): 재귀 함수

def factorial(n):
    # n! = n × (n-1) × ... × 1
    # 재귀로 구현하세요
    pass

print(factorial(5))    # 120
print(factorial(0))    # 1

핵심 요약

개념 설명
def 이름(매개변수): 함수 정의
return 값 값을 반환하고 함수 종료
내장 함수 abs(), len(), min(), max() 등 — import 불필요
import 표준/외부 라이브러리 불러오기
지역 변수 함수 안에서만 존재
전역 변수 함수 밖, 프로그램 전체에서 접근
global 함수 안에서 전역 변수 수정 허용
None return이 없을 때 반환되는 값
매개변수 함수 정의 시 이름 붙인 입력
인수 함수 호출 시 전달하는 실제 값
DRY Don't Repeat Yourself — 반복을 함수로 줄임