01. 함수 (행동 단위 분리)
"함수는 자판기입니다. 재료(Input)를 넣으면 결과물(Output)이 나옵니다. 더 중요한 건, 하나의 구체적인 행동(동사)을 정의하는 것입니다."
1. 함수의 구조
수학의 함수 $f(x) = x + 1$ 과 똑같습니다.
def make_coffee(bean, water): # 재료 (Parameter)
"""
커피콩과 물을 받아서 커피를 만드는 함수입니다.
(이런 설명을 'Docstring'이라고 합니다)
"""
result = bean + water # 로직 (Body)
return result # 결과물 (Return Value)
Return과 Print의 차이?
print(결과): 화면에 보여주고 증발합니다. (다른 요리에 재료로 못 씀)return 결과: 결과를 뱉어내서 변수에 담을 수 있습니다. (다른 요리의 재료로 씀)
2. 왜 함수를 쓰는가?
- 재사용: 똑같은 코드를 여러 번 치기 싫어서.
- 가독성: 코드가 "어떻게(How)" 구현되었는지 숨기고, "무엇을(What)" 하는지 보여주기 위해서.
❌ 나쁜 예 (절차 지향)
✅ 좋은 예 (함수형)
def boil_ramen(water_ml, time_min):
# ... 복잡한 과정 ...
return "맛있는 라면"
# 읽는 사람은 "물 550ml, 4분 끓이면 라면이 나오는구나"만 알면 됨
my_lunch = boil_ramen(550, 4)
3. 스코프 (Scope) - 변수의 유효 범위
함수 안에서 만든 변수는 함수 안에서만 살아있습니다. 이건 불편한 게 아니라, 안전한 것입니다.
함수 밖의 전역 변수(Global Variable)를 함부로 가져다 쓰거나 수정하면 코드가 길어졌을 때 버그를 잡을 수 없습니다. 함수는 되도록 자기한테 주어진 인자(Argument)만 가지고 일해야 합니다 (Pure Function).