5-1 함수 정의와 호출: def 키워드 사용법

5-1 함수 정의와 호출: def 키워드 사용법

← 목차로 돌아가기

썸네일

파이썬 프로그래밍을 하다 보면 같은 작업을 여러 번 반복해야 할 때가 많습니다. 이때마다 코드를 계속해서 다시 작성하는 것은 비효율적이며, 코드의 가독성도 떨어뜨리게 됩니다. 함수는 이러한 반복적인 작업을 한 번 정의하고 필요할 때마다 호출하여 사용할 수 있게 해주는 파이썬의 핵심 기능입니다.

핵심 요약

함수는 특정 작업을 수행하는 코드 블록을 묶어 이름을 붙인 것으로, def 키워드를 사용하여 정의하고, 이름과 괄호로 호출하여 재사용합니다. 이는 코드의 중복을 줄이고 유지보수를 용이하게 하며, 프로그램의 구조를 명확하게 만듭니다.

함수는 왜 필요할까요? 코드를 재사용하는 힘

함수는 코드의 반복을 줄이고 효율성을 높이는 가장 기본적인 도구입니다.

프로젝트를 진행하다 보면 특정 기능을 여러 곳에서 사용해야 하는 상황을 자주 마주하게 됩니다. 예를 들어, 사용자에게 환영 메시지를 출력하는 코드나 특정 계산을 수행하는 코드가 프로그램의 여러 부분에서 필요할 수 있습니다. 제가 처음 파이썬으로 데이터 분석 자동화 스크립트를 만들 때, 비슷한 데이터 정제 로직을 스크립트 곳곳에 복사 붙여넣기 하다가 나중에 로직을 수정해야 할 때마다 모든 곳을 찾아다니며 고쳐야 했던 경험이 있습니다. 이 과정에서 한두 군데를 놓쳐서 버그가 발생하기도 했고요. 이러한 경험을 통해 함수 사용의 중요성을 깨달았습니다.

함수를 사용하면 이처럼 중복되는 코드를 하나의 블록으로 묶고, 필요할 때마다 그 이름을 불러 실행할 수 있습니다. 마치 여러분이 리모컨으로 TV를 켜듯이, 특정 기능을 수행하는 코드를 한 번 정의하고 그 이름만 부르면 되는 것이죠. 2024년 현재 파이썬 개발 환경에서 함수는 프로그램 구조화와 유지보수의 핵심으로 자리 잡고 있습니다.

‘def’ 키워드로 함수 정의하기: 나만의 코드 블록 만들기

파이썬에서 함수를 정의할 때는 def 키워드를 사용하며, 함수의 이름과 수행할 코드를 명확히 지정합니다.

함수를 정의하는 방법은 매우 간단합니다. def 키워드를 쓰고, 이어서 함수 이름을 작성한 뒤 괄호 ()를 붙이고 콜론 :으로 마무리합니다. 그리고 다음 줄부터는 들여쓰기를 하여 함수가 수행할 코드 블록을 작성합니다. 이 들여쓰기는 파이썬에서 코드 블록을 구분하는 중요한 요소이므로 첫 번째 프로그램 작성 시에도 강조했던 것처럼 각별히 주의해야 합니다.

예를 들어, 간단한 인사말을 출력하는 함수를 정의해 보겠습니다.

def greet():
    print("안녕하세요, 파이썬 초보자 여러분!")
    print("함수에 오신 것을 환영합니다.")

이 코드가 하는 일: ‘greet’이라는 이름의 함수를 정의합니다. 이 함수는 호출될 때 두 줄의 인사말을 화면에 출력합니다.

여기서 greet는 함수의 이름이고, 괄호 ()는 이 함수가 인자(매개변수)를 받지 않는다는 것을 의미합니다. (인자를 받는 함수는 다음 장에서 자세히 다룰 것입니다.) 콜론 : 뒤에 오는 들여쓰기된 코드들이 greet() 함수가 호출될 때 실행될 내용입니다.

정의된 함수 호출하기: 언제든 원하는 순간에

정의된 함수는 함수 이름과 괄호 ()를 사용하여 원하는 시점에 실행할 수 있습니다.

함수를 정의했다고 해서 바로 코드가 실행되는 것은 아닙니다. 정의는 ‘이런 기능을 하는 코드 블록이 있다’고 알려주는 것이고, 실제로 기능을 사용하려면 함수를 ‘호출’해야 합니다. 함수를 호출하는 방법은 단순히 함수 이름 뒤에 괄호 ()를 붙이는 것입니다.

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

# 함수 호출
say_hello()
say_hello()
say_hello()

이 코드가 하는 일: ‘say_hello’ 함수를 정의하고, 이 함수를 세 번 호출하여 ‘Hello, Python!’을 세 번 출력합니다.

이렇게 호출하면 say_hello()가 쓰인 곳에서 print("Hello, Python!") 코드가 실행됩니다. 함수를 여러 번 호출하면 코드를 여러 번 작성할 필요 없이 원하는 만큼 기능을 반복 실행할 수 있다는 것을 알 수 있습니다. 제가 만든 Tkinter 기반 GUI 자동화 프로그램에서는 특정 버튼 클릭 시 복잡한 데이터 처리 루틴을 함수로 묶어두고, 버튼 이벤트 발생 시 그 함수를 호출하는 방식으로 코드를 구성했습니다. 덕분에 코드가 훨씬 깔끔하고 유지보수도 쉬웠습니다.

함수 사용 시 흔한 실수와 해결 방법

함수와 관련된 오류는 주로 들여쓰기나 함수 호출 문법에서 발생하며, 파이썬 에러 메시지를 통해 쉽게 진단할 수 있습니다.

들여쓰기 오류 (IndentationError)

파이썬은 들여쓰기로 코드 블록을 구분합니다. 함수를 정의할 때 이 들여쓰기를 제대로 하지 않으면 IndentationError가 발생합니다. 이는 파이썬 초보자들이 가장 자주 겪는 오류 중 하나입니다.

def calculate_sum():
print("이 줄은 들여쓰기가 되어있지 않습니다.") # IndentationError 발생!

이 코드가 하는 일: 의도적으로 잘못된 들여쓰기를 보여주어 ‘IndentationError’가 발생하는 예를 제시합니다.

해결 방법: 함수 내부에 있는 모든 코드는 동일하게 들여쓰기해야 합니다. 일반적으로 공백 4칸을 사용합니다.

괄호 () 없이 함수 호출

함수를 호출할 때 괄호를 빼먹는 경우도 흔합니다. 괄호가 없으면 함수를 ‘호출’하는 것이 아니라, 그 함수 객체 자체를 참조하게 됩니다. 이 경우 에러가 발생하지 않을 수 있어 더욱 혼란스러울 수 있습니다.

def show_message():
    print("메시지를 보여줍니다.")

show_message # 함수를 호출하지 않고 함수 객체 자체를 참조합니다.
print(show_message) # <function show_message at 0x...> 와 같은 결과가 출력됩니다.

이 코드가 하는 일: ‘show_message’ 함수를 정의한 후, 괄호 없이 함수를 참조할 때 어떤 일이 일어나는지 보여줍니다.

해결 방법: 함수를 실행하려면 반드시 함수 이름 뒤에 괄호 ()를 붙여야 합니다.

간단한 함수 예제: 인사말 출력 프로그램

이제 앞서 배운 내용을 바탕으로 간단한 함수를 만들어보고 호출해봅시다. 목표는 사용자에게 환영 메시지를 보내는 함수를 만들고, 이 함수를 여러 번 호출하여 메시지를 출력하는 것입니다.

단계 1: 함수 정의하기

먼저 welcome_message라는 함수를 정의하고, 그 안에 환영 메시지를 출력하는 코드를 작성합니다.

def welcome_message():
    print("=" * 30)
    print("환영합니다! 파이썬 함수의 세계로.")
    print("이 메시지는 함수를 통해 출력됩니다.")
    print("=" * 30)

이 코드가 하는 일: ‘welcome_message’라는 이름의 함수를 정의합니다. 이 함수는 호출될 때 포맷된 환영 메시지를 출력합니다.

단계 2: 함수 호출하기

정의된 welcome_message 함수를 프로그램의 여러 지점에서 호출해봅니다.

# 함수 정의
def welcome_message():
    print("=" * 30)
    print("환영합니다! 파이썬 함수의 세계로.")
    print("이 메시지는 함수를 통해 출력됩니다.")
    print("=" * 30)

# 함수 호출
print("프로그램 시작...")
welcome_message() # 첫 번째 호출

print("다른 작업을 수행 중...")
# 여기에 다른 복잡한 코드가 들어갈 수 있습니다.

welcome_message() # 두 번째 호출

print("프로그램 종료.")

이 코드가 하는 일: ‘welcome_message’ 함수를 정의하고, 프로그램 흐름 중간에 두 번 호출하여 환영 메시지를 출력합니다.

코드를 실행해보시면, welcome_message()가 호출될 때마다 정의된 메시지가 정확히 출력되는 것을 확인할 수 있습니다. 이처럼 함수를 사용하면 필요한 코드를 깔끔하게 정리하고, 언제든 쉽게 재사용할 수 있게 됩니다. 이는 코드의 가독성을 높이고, 나중에 기능을 변경해야 할 때도 함수 내부만 수정하면 되므로 유지보수 비용을 크게 절감해줍니다.

FAQ: 함수 정의 및 호출에 대한 궁금증

Q1: 함수 이름은 어떻게 지어야 하나요?

A1: 함수 이름은 해당 함수가 어떤 작업을 하는지 명확하게 나타내도록 짓는 것이 중요합니다. 주로 동사로 시작하고, 소문자와 언더스코어(_)를 사용하여 단어를 구분하는 스네이크 케이스(snake_case)를 따르는 것이 파이썬의 일반적인 관례입니다. 예를 들어 calculate_total(), display_info()처럼 지을 수 있습니다.

Q2: 함수를 정의만 하고 호출하지 않으면 어떻게 되나요?

A2: 함수를 정의만 하고 호출하지 않으면, 그 함수 내부에 작성된 코드는 전혀 실행되지 않습니다. 마치 리모컨으로 TV를 켜지 않으면 TV가 켜지지 않는 것과 같습니다. 파이썬 인터프리터는 정의된 함수를 무시하고 다음 줄의 코드를 실행합니다.

Q3: 함수의 코드 블록 들여쓰기는 꼭 4칸이어야 하나요?

A3: 파이썬은 공백 4칸 들여쓰기를 표준으로 권장합니다. 기술적으로는 공백 2칸이나 탭 문자도 가능하지만, 일관성을 위해 4칸 공백을 사용하는 것이 좋습니다. 통합 개발 환경(IDE)인 VS Code나 PyCharm 등에서는 자동으로 4칸 들여쓰기를 지원하여 편리합니다.

참고 자료

  1. [1] Python 공식 튜토리얼 — 제어 흐름 도구와 함수 정의 — https://docs.python.org/ko/3/tutorial/controlflow.html
  2. [2] Python 용어집 — https://docs.python.org/ko/3/glossary.html

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다