목차
프로그래밍을 하다 보면 몇 개의 값만 변경될 뿐 같은 코드를 반복적으로 사용하는 경우가 많습니다. 이러한 코드를 반복해서 작성하면 코드의 길이도 길어지고 중간에 실수할 가능성이 있습니다. 파이썬에는 특정 코드 구문을 함수로 만들어 사용하는 기능을 제공합니다. 함수를 정의하고 사용하는 기준에 대해 설명하고 예제 코드를 사용하여 이해하기 쉽게 설명하도록 하겠습니다. 이러한 기준을 따라 코드를 함수로 정의하면 코드의 재사용성과 가독성이 향상되며, 유지보수가 용이해집니다.
1. 코드 재사용성
반복해서 사용되는 코드는 함수로 정의하는 것이 좋습니다. 코드를 함수로 추상화하면 여러 곳에서 동일한 로직을 사용할 수 있으며, 코드 중복을 피할 수 있습니다.
def calculate_average(numbers):
total = sum(numbers)
average = total / len(numbers)
return average
scores1 = [85, 92, 78, 90]
average1 = calculate_average(scores1)
print("Average:", average1)
scores2 = [76, 80, 95, 88]
average2 = calculate_average(scores2)
print("Average:", average2)
# 결과값
# Average: 86.25
# Average: 84.75
위의 예제에서 calculate_average 함수는 리스트로 주어진 숫자들의 평균을 계산하는 역할을 합니다. 이 함수를 사용하여 scores1과 scores2의 평균을 계산하고 출력합니다.
2. 코드의 가독성과 유지보수성
코드를 함수로 정의하면 가독성이 향상됩니다. 함수는 명확하게 기능을 표현하고, 함수의 이름과 매개변수를 통해 코드의 의도를 명확히 전달할 수 있습니다. 또한, 함수로 구성된 프로그램은 유지보수가 쉽습니다. 함수를 수정하거나 변경해야 할 때, 해당 함수만 수정하면 되므로 코드의 일관성을 유지할 수 있습니다.
def calculate_discounted_price(original_price, discount_rate):
discounted_price = original_price * (1 - discount_rate)
return discounted_price
product_price = 1000
discount = 0.2
final_price = calculate_discounted_price(product_price, discount)
print("Final Price:", final_price)
# 결과값
# Final Price: 800.0
위의 예제에서 calculate_discounted_price 함수는 원래 가격과 할인율을 받아서 할인된 가격을 계산합니다. 이 함수를 사용하여 상품의 최종 가격을 계산하고 출력합니다.
3. 코드의 단일 책임 원칙(Single Responsibility Principle, SRP)
함수는 하나의 기능이나 작업을 수행하는 것이 좋습니다. 함수가 한 가지 기능에 집중하면 함수의 재사용성과 가독성이 높아지며, 코드의 유지보수도 쉬워집니다.
def validate_email(email):
if "@" in email and "." in email:
return True
else:
return False
user_email = input("Enter your email: ")
is_valid_email = validate_email(user_email)
if is_valid_email:
print("Email is valid.")
else:
print("Email is not valid.")
# 결과값
# xxx@naver.com 입력 시
# Email is valid.
# xxxx.com 입력 시
# Email is not valid.
위의 예제에서 validate_email 함수는 이메일 주소가 유효한지 확인하는 역할을 합니다. 함수는 이메일에 "@"와 "." 문자가 포함되어 있는지 확인하고, 결과를 불리언 값으로 반환합니다.
4. 코드의 모듈화와 추상화
함수는 코드를 모듈화 하고 추상화하는데 도움을 줍니다. 함수를 사용하여 비슷한 작업을 수행하는 코드를 그룹화하고, 이를 더 큰 기능으로 조합하여 복잡한 작업을 수행하는 모듈로 확장할 수 있습니다.
def calculate_area(radius):
pi = 3.14159
area = pi * radius ** 2
return area
def calculate_volume(radius, height):
base_area = calculate_area(radius)
volume = base_area * height
return volume
cylinder_radius = 5
cylinder_height = 10
cylinder_volume = calculate_volume(cylinder_radius, cylinder_height)
print("Cylinder Volume:", cylinder_volume)
# 결과값
# Cylinder Volume: 785.3975
위의 예제에서 calculate_area 함수는 반지름을 받아서 원의 넓이를 계산하는 역할을 합니다. calculate_volume함수는 반지름과 높이를 받아서 원기둥의 부피를 계산합니다. calculate_volume 함수 내부에서 calculate_area 함수를 호출하여 원의 넓이를 계산합니다.
5. 함수의 인자와 반환값
함수의 인자와 반환값을 잘 정의하는 것이 중요합니다. 인자와 반환값을 명확하게 정의하면 함수 간의 의존성을 줄일 수 있고, 함수의 동작을 쉽게 이해할 수 있습니다.
def greet_user(name):
greeting = "Hello, " + name + "!"
return greeting
user_name = input("Enter your name: ")
message = greet_user(user_name)
print(message)
# 결과 값
# gildong 입력시
# Hello, gildong!
위의 예제에서 greet_user 함수는 사용자의 이름을 받아서 인사 메시지를 생성하고 반환합니다. input 함수를 사용하여 사용자로부터 이름을 입력받고, greet_user 함수를 호출하여 인사 메시지를 생성한 뒤 출력합니다.
6. 마치며
지금까지 프로그램 작성 시 함수로 코딩해야 하는 상황에 대해 5가지로 분류하여 설명과 더불어 예제코드를 활용하여 함수화를 해 보았습니다. 물론 이와 같은 정의를 꼭 지킬 필요는 없지만 자주 코딩을 하다 보면 함수화해야 하는 부분이 감으로 느껴질 때가 있습니다. 또는 1차적으로 코딩을 하고 나서 나중에 코드 정리 시에 필요 부분을 함수로 변경하는 경우도 있으니, 오늘의 내용을 잘 참고하시면 좋겠습니다.