함수는 코드의 재사용성을 높이기 위해 사용되는 코드 블록입니다. 특정 작업을 수행하는 코드 조각을 하나의 이름으로 묶어 필요할 때마다 호출하여 사용할 수 있습니다. 예를 들어, 두 숫자의 합을 구하는 함수를 만들어 보겠습니다.
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 출력: 8
위 코드에서 add라는 함수는 두 개의 매개변수 a와 b를 받아 이들의 합을 반환합니다. 이렇게 함수를 사용하면 동일한 작업을 반복해서 작성할 필요 없이 함수만 호출하면 됩니다.
재귀함수는 함수 내부에서 자기 자신을 호출하는 함수입니다. 이는 반복적인 작업을 처리할 때 유용하게 사용됩니다. 대표적인 예로 팩토리얼 계산을 들 수 있습니다.
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 출력: 120
위 코드에서 factorial 함수는 n이 1일 때 1을 반환하고, 그렇지 않으면 n * factorial(n-1)을 반환합니다. 이를 통해 팩토리얼을 재귀적으로 계산할 수 있습니다.
함수를 사용하는 주요 이유는 다음과 같습니다:
코드의 재사용성: 동일한 코드를 여러 번 작성할 필요 없이 함수를 호출하여 사용할 수 있습니다.
코드의 가독성: 코드를 더 잘 구조화하고, 읽기 쉽게 만들어 줍니다.
유지보수의 용이성: 코드 수정이 용이하며, 오류가 발생했을 때 쉽게 수정할 수 있습니다.
예를 들어, 여러 번 사용되는 코드가 있을 때 함수를 사용하면 코드가 더 간결하고 명확해집니다.
함수를 정의할 때는 def 키워드를 사용하고, 함수를 호출할 때는 함수 이름 뒤에 괄호를 붙여 호출합니다. 다음은 간단한 함수 정의와 호출 예제입니다.
def greet(name):
return f"Hello, {name}!"
message = greet("Alice")
print(message) # 출력: Hello, Alice!
위 코드에서 greet 함수는 name 매개변수를 받아서 인사말을 반환합니다. greet("Alice")를 호출하면 "Hello, Alice!"라는 문자열을 반환합니다.
다음은 일반 함수와 재귀함수의 예시를 통해 차이점을 알아보겠습니다.
def add(a, b):
return a + b
print(add(2, 3)) # 출력: 5
def sum_recursive(n):
if n == 0:
return 0
else:
return n + sum_recursive(n-1)
print(sum_recursive(5)) # 출력: 15
sum_recursive 함수는 재귀적으로 0부터 n까지의 합을 계산합니다.
함수를 사용할 때 몇 가지 주의할 점이 있습니다:
매개변수와 반환값: 함수가 기대하는 매개변수와 반환값의 타입을 정확히 이해하고 사용해야 합니다.
재귀함수의 기저 조건: 재귀함수는 반드시 종료 조건을 가져야 합니다. 그렇지 않으면 무한 루프에 빠질 수 있습니다.
전역 변수 사용: 함수 내부에서 전역 변수를 사용할 때는 주의가 필요합니다. 함수는 가능하면 지역 변수를 사용하는 것이 좋습니다.
예를 들어, 전역 변수 사용 시 발생할 수 있는 문제를 살펴보겠습니다.
total = 0
def add_to_total(n):
global total
total += n
add_to_total(5)
print(total) # 출력: 5
add_to_total(3)
print(total) # 출력: 8
위 코드에서 add_to_total 함수는 전역 변수 total을 수정합니다. 전역 변수를 사용할 때는 global 키워드를 사용해야 하며, 이는 코드의 가독성과 유지보수를 어렵게 만들 수 있습니다.