안녕하세요, 20년 넘게 파이썬과 함께한 ‘코딩하는곰’입니다. 오늘은 파이썬 프로그래밍의 핵심 중의 핵심, 함수(Function)에 대해 깊이 있게 파헤쳐보려고 합니다. 함수는 단순히 코드를 묶는 도구가 아니라, 효율적이고 읽기 쉬운 프로그램을 만드는 설계도의 기본 단위입니다. “def”와 “return”이라는 간단한 키워드 뒤에 숨겨진 강력한 힘을 이해한다면, 여러분의 코딩 실력은 한 단계 도약하게 될 거예요. 초보자분들도 쉽게 따라올 수 있도록, 기본 개념부터 실전 예제까지 차근차근 설명해드리겠습니다.
프로그래밍을 하다 보면 똑같은 로직을 반복해서 작성해야 할 때가 많습니다. 예를 들어, 사용자로부터 입력받은 숫자가 짝수인지 홀수인지 판별하는 코드를 프로그램 여러 곳에서 사용해야 한다고 생각해보세요. 함수가 없다면, 같은 코드를 여러 번 복사 붙여넣기 해야 하고, 이는 유지보수를 어렵게 만드는 주범이 됩니다. 여기서 함수가 등장합니다. 함수는 특정 작업을 수행하는 코드 블록을 하나의 단위로 묶어 이름을 붙인 것입니다. 한 번 정의해두면, 프로그램 어디에서든 그 이름만으로 해당 코드를 실행(호출)할 수 있습니다. 이는 ‘코드의 재사용성’을 극대화하고, 프로그램의 구조를 명확하게 만들어 줍니다. 복잡한 문제를 작은 함수들로 나누어 해결하는 방식은 현대 소프트웨어 공학의 기본 원칙이기도 하죠.
def 키워드파이썬에서 함수를 만드는(정의하는) 문법은 매우 직관적입니다. 바로 def 키워드를 사용하는 거죠.
def 함수이름(매개변수1, 매개변수2, ...):"""함수의 설명 (Docstring)"""# 수행할 코드 블록return 반환값
def: “정의한다(define)“의 약자로, 함수 정의를 시작하겠다는 선언입니다.:): 함수 정의문의 끝을 나타내며, 반드시 붙여야 합니다. 다음 줄부터는 들여쓰기로 함수의 몸체(Body)가 시작됩니다.return: 함수의 실행 결과를 호출한 곳으로 되돌려줍니다(반환). 반환값이 없으면 생략할 수 있습니다.
간단한 예제를 통해 def의 사용법을 익혀보겠습니다.def greet():"""간단한 인사 함수"""print("안녕하세요! 코딩하는곰입니다.")# 함수 호출greet() # 출력: 안녕하세요! 코딩하는곰입니다.
위 예제는 매개변수와 반환값이 없는 가장 기본적인 함수 형태입니다. greet()이라고 호출하면 함수 내부의 print 문이 실행됩니다.
🎮 게임 개발에 관심이 있다면, MySQL/MariaDB GRANT 명령어 완벽 가이드 세부 권한 부여부터 관리까지를 참고해보세요.
return 문함수가 단순히 메시지를 출력하는 것만으로 끝난다면, 그 활용도는 제한적일 수 있습니다. 함수의 진정한 가치는 입력을 받아 처리하고, 그 결과를 도출해내는 것에 있습니다. 이때 핵심 역할을 하는 것이 return 문입니다. return은 두 가지 중요한 일을 합니다.
return 문을 만나면 함수는 즉시 실행을 멈추고 호출한 곳으로 돌아갑니다.return 문이 없다면, 함수는 암묵적으로 None이라는 값을 반환합니다. None은 ‘아무것도 없음’을 의미하는 파이썬의 특별한 값입니다.def add(a, b):"""두 숫자의 합을 반환하는 함수"""result = a + breturn result # a + b의 결과를 호출한 곳으로 반환def add_no_return(a, b):"""두 숫자의 합을 계산하지만 반환하지 않는 함수"""result = a + b# return 문이 없음# 함수 호출 및 결과 사용sum_result = add(5, 3)print(f"add 함수 결과: {sum_result}") # 출력: add 함수 결과: 8# 반환값을 변수에 저장하거나 바로 사용 가능print(f"바로 사용: {add(10, 20)}") # 출력: 바로 사용: 30no_return_result = add_no_return(5, 3)print(f"add_no_return 함수 결과: {no_return_result}") # 출력: add_no_return 함수 결과: None
add 함수는 return result를 통해 계산 결과를 반환합니다. 따라서 sum_result = add(5, 3)과 같이 그 결과를 변수에 저장하거나, print(add(10, 20))과 같이 다른 표현식 안에서 바로 사용할 수 있습니다. 반면 add_no_return 함수는 계산은 하지만 return 문이 없어, 호출한 결과는 None이 됩니다.
함수를 설명할 때 자주 혼동되는 개념이 매개변수와 인자입니다.
def introduce(name, age): # 여기서 'name', 'age'가 매개변수"""자기소개 함수"""print(f"제 이름은 {name}이고, 나이는 {age}살입니다.")introduce("곰돌이", 15) # 여기서 "곰돌이", 15가 인자# 출력: 제 이름은 곰돌이이고, 나이는 15살입니다.
회원가입이나 비밀번호 변경 시 안전한 비밀번호를 빠르게 생성할 수 있는 온라인 도구가 유용합니다.
이론을 이해했으니, 여러 가지 유형의 함수를 직접 만들어보며 감각을 익혀봅시다. 1. 기본값 매개변수 (Default Parameter) 함수를 호출할 때 특정 인자를 생략하면, 미리 정해둔 기본값이 사용되도록 할 수 있습니다. 이는 함수의 유연성을 크게 높여줍니다.
def order_menu(item, quantity=1, takeout=False):"""메뉴 주문 함수 (수량과 포장 여부는 기본값 있음)"""order_text = f"{item} {quantity}개 주문"if takeout:order_text += " (포장)"else:order_text += " (매장)"return order_textprint(order_menu("아메리카노")) # quantity=1, takeout=False 기본값 사용# 출력: 아메리카노 1개 주문 (매장)print(order_menu("라떼", 2)) # quantity=2 지정, takeout=False 기본값 사용# 출력: 라떼 2개 주문 (매장)print(order_menu("샌드위치", 1, True)) # 모든 인자 지정# 출력: 샌드위치 1개 주문 (포장)
2. 여러 값을 반환하는 함수 (튜플 반환) 파이썬의 함수는 마치 하나의 값만 반환하는 것처럼 보이지만, 실제로는 튜플(Tuple)을 통해 여러 값을 한꺼번에 반환할 수 있습니다.
def calculator(a, b):"""사칙연산 결과를 모두 반환"""plus = a + bminus = a - bmultiply = a * bdivide = a / b if b != 0 else "0으로 나눌 수 없음"# 쉼표로 구분하여 여러 값 반환 -> 자동으로 튜플로 패킹(Packing)return plus, minus, multiply, divide# 결과를 하나의 변수(튜플)로 받기results = calculator(10, 2)print(results) # 출력: (12, 8, 20, 5.0)print(f"덧셈 결과: {results[0]}") # 출력: 덧셈 결과: 12# 튜플 언패킹(Unpacking)을 이용해 각 결과를 별도 변수에 저장p, m, mul, d = calculator(20, 4)print(f"곱셈: {mul}, 나눗셈: {d}") # 출력: 곱셈: 80, 나눗셈: 5.0
3. 도전 과제: 간단한 유틸리티 함수 만들기 지금까지 배운 개념을 총동원하여, 실제 프로그래밍에서 유용하게 쓸 수 있는 함수를 만들어 봅시다.
def create_email(username, domain="gmail.com"):"""사용자 이름과 도메인으로 이메일 주소를 생성"""email = f"{username}@{domain}"return emaildef is_palindrome(text):"""주어진 문자열이 회문(앞뒤가 같은 문자열)인지 확인"""# 대소문자 구분 없이, 공백 제거 후 비교processed_text = text.lower().replace(" ", "")return processed_text == processed_text[::-1] # 슬라이싱으로 문자열 뒤집기# 활용 예시print(create_email("codingbear")) # 출력: codingbear@gmail.comprint(create_email("team", "naver.com")) # 출력: team@naver.comprint(is_palindrome("토마토")) # 출력: Trueprint(is_palindrome("Python")) # 출력: Falseprint(is_palindrome("A man a plan a canal Panama")) # 출력: True (유명한 회문 문장)
치매 예방과 인지 기능 향상을 위한 앱을 찾고 있다면, AI 기반 힌트와 함께하는 스도쿠 저니를 추천합니다.
정리하자면, 파이썬에서 def로 함수를 정의하고 return으로 값을 반환하는 것은 프로그래밍의 기본기를 다지는 가장 중요한 단계입니다. 오늘 배운 내용—함수의 정의와 호출, 매개변수와 인자, return의 역할, 기본값 매개변수, 다중 반환—을 잘 익혀두세요. 이 개념들은 앞으로 만나게 될 클래스(Class), 데코레이터(Decorator), 제너레이터(Generator) 등 모든 고급 주제의 토대가 됩니다. 처음에는 간단한 함수부터 차곡차곡 만들어보는 연습을 하세요. ‘코딩하는곰’은 여러분의 파이썬 여정을 항상 응원합니다! 궁금한 점이 있다면 댓글로 남겨주세요. 다음 시간에는 함수의 범위(Scope)와 람다(Lambda) 함수에 대해 알아보겠습니다. 함께 성장해요!
두뇌 활성화와 집중력 향상을 위한 게임이 필요하다면, 편안한 분위기의 스도쿠 저니: 크립토 할아버지가 도움이 될 것입니다.
