파이썬 교육 챕터 34 함수의 기본 개념

함수(Function)의 기본 개념: 코드의 재사용과 모듈화

1. 서론: 반복되는 작업, 효율적으로 관리하기

지금까지 우리는 파이썬의 기본적인 문법과 자료 구조, 그리고 조건문과 반복문을 사용하여 다양한 프로그램을 만들어 보았습니다. 프로그램을 작성하다 보면 특정 작업을 여러 번 반복해야 하거나, 복잡한 로직을 여러 곳에서 사용해야 하는 경우가 빈번하게 발생합니다. 예를 들어, 사용자로부터 입력을 받아 유효성을 검사하는 코드, 특정 계산을 수행하는 코드, 또는 데이터베이스에 정보를 저장하는 코드 등이 그렇습니다. 이러한 코드들을 필요할 때마다 매번 새로 작성하거나 복사하여 붙여넣는 것은 비효율적이며, 코드의 가독성을 떨어뜨리고 유지보수를 어렵게 만듭니다. 이때 필요한 것이 바로 ‘함수(Function)’입니다. 함수는 특정 작업을 수행하는 코드 블록을 하나로 묶어 이름을 부여한 것으로, 필요할 때마다 이름을 호출하여 재사용할 수 있습니다. 함수를 사용하면 코드를 모듈화하고, 중복을 줄이며, 프로그램의 구조를 더욱 명확하게 만들 수 있습니다. 이 챕터에서는 파이썬 함수의 기본적인 개념과 정의 방법, 그리고 함수를 호출하여 사용하는 방법에 대해 깊이 있게 알아보겠습니다. 함수를 마스터하는 것은 여러분의 파이썬 프로그래밍 능력을 한 단계 더 끌어올리고, 효율적이고 체계적인 코드를 작성하는 데 필수적인 단계가 될 것입니다.

2. 함수(Function)란 무엇인가?

함수는 특정 작업을 수행하도록 설계된 재사용 가능한 코드 블록입니다. 함수는 입력(매개변수)을 받아 어떤 작업을 수행한 후, 결과(반환 값)를 내보낼 수 있습니다. 함수를 사용하는 주된 목적은 다음과 같습니다.

  • 코드 재사용성 (Reusability): 한 번 정의된 함수는 프로그램의 여러 곳에서 필요할 때마다 호출하여 사용할 수 있습니다. 이는 코드의 중복을 줄여줍니다.
  • 모듈화 (Modularity): 복잡한 프로그램을 작은 단위의 함수들로 나누어 작성함으로써, 프로그램의 구조를 명확하게 하고 이해하기 쉽게 만듭니다.
  • 유지보수성 (Maintainability): 기능별로 코드를 분리하면, 특정 기능을 수정하거나 개선할 때 해당 함수만 변경하면 되므로 유지보수가 용이합니다.
  • 가독성 (Readability): 함수 이름을 통해 해당 함수가 어떤 작업을 수행하는지 쉽게 파악할 수 있어 코드의 가독성이 높아집니다.

3. 함수 정의하기: def 키워드

파이썬에서 함수를 정의할 때는 def 키워드를 사용합니다. 함수의 정의는 다음과 같은 기본 구조를 가집니다.

def 함수이름(매개변수1, 매개변수2, ...):
    """독스트링: 함수의 목적과 사용법을 설명합니다."""
    # 함수가 수행할 코드 블록
    # (반드시 들여쓰기 해야 합니다)
    return 반환값 # 선택 사항

설명:

  • def: 함수 정의의 시작을 알리는 키워드입니다.
  • 함수이름: 함수를 호출할 때 사용할 이름입니다. 변수 이름 규칙과 유사하게 지어야 합니다. (소문자와 밑줄 사용 권장)
  • (): 괄호 안에는 함수가 외부로부터 전달받을 값인 ‘매개변수(Parameter)’를 정의합니다. 매개변수가 없어도 괄호는 반드시 필요합니다.
  • : (콜론): 함수 정의의 끝을 알립니다.
  • 독스트링 (Docstring): 함수 바로 아래에 삼중 따옴표로 작성하는 문자열입니다. 함수의 목적, 매개변수, 반환 값 등을 설명하여 코드의 문서화에 중요한 역할을 합니다. help(함수이름)으로 확인할 수 있습니다.
  • 코드 블록: 함수가 호출될 때 실행될 코드들입니다. 반드시 들여쓰기 해야 합니다.
  • return: 함수가 작업을 수행한 후 호출자에게 돌려줄 값인 ‘반환 값(Return Value)’을 지정합니다. return 문이 없으면 함수는 기본적으로 None을 반환합니다.

3.1. 매개변수와 반환 값이 없는 함수

가장 간단한 형태의 함수입니다. 특정 작업을 수행하고 끝납니다.

def say_hello():
    """간단한 환영 메시지를 출력하는 함수입니다."""
    print("Hello, World!")
    print("파이썬 함수에 오신 것을 환영합니다.")

3.2. 매개변수가 있는 함수

함수가 외부로부터 값을 받아와 그 값을 사용하여 작업을 수행할 때 매개변수를 사용합니다.

def greet(name):
    """이름을 받아 환영 메시지를 출력하는 함수입니다."
    print(f"안녕하세요, {name}님!")

def add_numbers(num1, num2):
    """두 숫자를 받아 덧셈 결과를 출력하는 함수입니다."
    result = num1 + num2
    print(f"두 숫자의 합은 {result}입니다.")

3.3. 반환 값이 있는 함수

함수가 어떤 작업을 수행한 후 그 결과를 호출자에게 돌려줄 때 return 문을 사용합니다.

def get_square(number):
    """숫자를 받아 그 숫자의 제곱을 반환하는 함수입니다."
    return number ** 2

def calculate_average(scores):
    """점수 리스트를 받아 평균을 계산하여 반환하는 함수입니다."
    if not scores:
        return 0 # 빈 리스트일 경우 0 반환
    total = sum(scores)
    average = total / len(scores)
    return average

4. 함수 호출하기: 정의된 함수 사용하기

함수를 정의하는 것은 마치 요리 레시피를 작성하는 것과 같습니다. 실제로 요리를 하려면 레시피를 보고 요리를 ‘시작’해야 하듯이, 함수도 정의만으로는 아무런 동작을 하지 않습니다. 정의된 함수를 실행하려면 함수 이름을 사용하여 ‘호출(Call)’해야 합니다.

4.1. 매개변수와 반환 값이 없는 함수 호출

say_hello() # 함수 호출
# 출력:
# Hello, World!
# 파이썬 함수에 오신 것을 환영합니다.

say_hello() # 여러 번 호출 가능

4.2. 매개변수가 있는 함수 호출

함수를 호출할 때 매개변수에 해당하는 값을 괄호 안에 전달합니다. 이 값들을 ‘인자(Argument)’라고 합니다.

greet("Alice") # 'Alice'는 name 매개변수의 인자
# 출력: 안녕하세요, Alice님!

greet("Bob")
# 출력: 안녕하세요, Bob님!

add_numbers(10, 5) # 10과 5는 각각 num1, num2 매개변수의 인자
# 출력: 두 숫자의 합은 15입니다.

add_numbers(100, 200)
# 출력: 두 숫자의 합은 300입니다.

4.3. 반환 값이 있는 함수 호출

반환 값이 있는 함수를 호출할 때는 그 반환 값을 변수에 저장하거나, 다른 연산에 바로 사용할 수 있습니다.

result1 = get_square(7) # get_square(7)의 반환 값(49)이 result1에 저장됩니다.
print(f"7의 제곱은 {result1}입니다.") # 출력: 7의 제곱은 49입니다.

print(f"5의 제곱은 {get_square(5)}입니다.") # 출력: 5의 제곱은 25입니다.

my_scores = [80, 90, 70, 100]
avg = calculate_average(my_scores)
print(f"평균 점수: {avg}") # 출력: 평균 점수: 85.0

empty_scores = []
avg_empty = calculate_average(empty_scores)
print(f"빈 리스트의 평균: {avg_empty}") # 출력: 빈 리스트의 평균: 0

5. 함수 이름 규칙 및 권장 사항

함수 이름도 변수 이름과 유사하게 지어야 합니다. 파이썬의 PEP 8 스타일 가이드는 다음과 같은 권장 사항을 제시합니다.

  • 소문자와 밑줄 사용 (snake_case): 함수 이름은 소문자로 작성하고, 여러 단어로 구성될 경우 단어 사이에 밑줄(_)을 사용하여 구분하는 것이 일반적입니다.
    • 권장: calculate_total, get_user_data, is_valid_email
    • 비권장: CalculateTotal, getUserData
  • 의미 있는 이름 사용: 함수가 어떤 작업을 수행하는지 명확하게 알 수 있도록 의미 있는 이름을 사용합니다. 동사로 시작하는 것이 일반적입니다.
    • 권장: send_email, process_data, validate_input
    • 비권장: do_something, func1

6. 결론: 코드의 효율성과 구조화를 위한 함수

이 챕터를 통해 여러분은 파이썬 함수의 기본적인 개념과 정의 방법, 그리고 함수를 호출하여 사용하는 방법에 대해 깊이 있게 학습했습니다. 함수가 코드의 재사용성을 높이고, 프로그램을 모듈화하며, 유지보수성과 가독성을 향상시키는 데 얼마나 중요한 역할을 하는지 이해했습니다. 매개변수를 통해 함수에 데이터를 전달하고, return 문을 통해 함수가 결과를 반환하는 원리도 살펴보았습니다.

함수는 파이썬 프로그래밍의 핵심적인 구성 요소이며, 여러분이 작성할 모든 프로그램에서 필수적으로 사용될 것입니다. 복잡한 문제를 작은 단위의 함수들로 나누어 해결하는 습관을 들이면, 여러분의 코드는 더욱 체계적이고 이해하기 쉬워질 것입니다.

이제 여러분은 파이썬의 핵심적인 제어문과 자료 구조, 그리고 함수라는 강력한 도구를 다룰 수 있게 되었습니다. 다음 챕터에서는 함수의 매개변수와 인자에 대해 더 깊이 있게 탐구하며, 다양한 인자 전달 방식과 기본값 설정 등에 대해 배우게 될 것입니다. 오늘 배운 함수 정의와 호출 방법을 활용하여 다양한 작업을 수행하는 함수를 직접 만들어 보면서, 여러분의 파이썬 실력을 더욱 단단하게 다지세요!

파이썬 교육 챕터 34 함수의 기본 개념