프로그래밍을 하다 보면 반복적으로 사용되는 코드가 많습니다. 이러한 코드를 효율적으로 관리하고 재사용성을 높이기 위해 함수(function)를 사용합니다. 이 튜토리얼에서는 파이썬에서 함수의 개념과 작성법을 자세히 살펴보고, 간단한 예제를 통해 함수의 활용법을 알아보겠습니다.
1. 함수란 무엇인가?
함수는 특정 작업을 수행하는 코드의 묶음입니다. 한 번 정의하면 여러 번 재사용할 수 있어 코드의 중복을 줄이고 가독성을 높입니다. 파이썬에서는 내장 함수(built-in functions)와 사용자 정의 함수(user-defined functions)를 모두 지원합니다.
함수의 장점:
- 코드 재사용성: 동일한 코드를 반복 작성하지 않아도 됩니다.
- 가독성 향상: 코드가 명확하고 구조적으로 보입니다.
- 유지보수 용이: 코드를 수정해야 할 때 함수만 변경하면 됩니다.
이 개념은 앞선 블로그 글의 OOP와도 연결이 되어 있습니다. 함수와 OOP는 다르면서도 표현방식에서는 크게 다르지 않습니다. OOP의 기초 개념에 대해서는 아래 링크를 통해서 먼저 알아보겠습니다.
https://diversity-is-right.tistory.com/77
2. 파이썬에서 함수 작성하기
파이썬에서 함수를 정의하려면 def 키워드를 사용합니다.
기본 구조:
def 함수이름(매개변수1, 매개변수2, ...):
"""문서화 문자열 (선택사항)"""
실행할 코드
return 반환값 (선택사항)
- 함수이름: 함수의 이름은 알기 쉽고 명확하게 짓는 것이 좋습니다.
- 매개변수: 함수 호출 시 전달되는 입력값입니다. 필요하지 않다면 생략 가능합니다.
- 반환값: 함수가 처리한 결과를 반환합니다. return 문을 생략하면 None을 반환합니다.
간단한 예제:
# 두 수를 더하는 함수
def add_numbers(a, b):
"""두 수를 더한 결과를 반환합니다."""
return a + b
# 함수 호출
result = add_numbers(3, 5)
print(result) # 출력: 8
3. 함수 매개변수와 반환값
위치 매개변수
가장 기본적인 매개변수 형태로, 함수 호출 시 전달한 값이 순서대로 매칭됩니다.
def greet(name):
print(f"안녕하세요, {name}님!")
greet("철수") # 출력: 안녕하세요, 철수님!
기본값 매개변수
매개변수에 기본값을 지정하면 함수 호출 시 값을 생략할 수 있습니다.
def greet(name="친구"):
print(f"안녕하세요, {name}님!")
greet() # 출력: 안녕하세요, 친구님!
greet("영희") # 출력: 안녕하세요, 영희님!
키워드 매개변수
함수 호출 시 매개변수 이름을 명시하면 순서와 상관없이 값을 전달할 수 있습니다.
def introduce(name, age):
print(f"제 이름은 {name}이고, 나이는 {age}살입니다.")
introduce(age=25, name="민수") # 출력: 제 이름은 민수이고, 나이는 25살입니다.
반환값
함수는 return 문을 사용해 값을 반환할 수 있습니다. 반환값이 여러 개일 경우 튜플 형태로 반환됩니다.
def calculate(a, b):
return a + b, a - b, a * b, a / b
result = calculate(10, 2)
print(result) # 출력: (12, 8, 20, 5.0)
4. 고급 함수 기능
가변 매개변수
매개변수의 개수가 가변적인 경우 *args를 사용합니다.
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4, 5)) # 출력: 15
키워드 가변 매개변수
키워드 형태의 가변 매개변수는 **kwargs를 사용합니다.
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="지수", age=30, job="개발자")
# 출력:
# name: 지수
# age: 30
# job: 개발자
5. 함수 활용 예제
1) 간단한 계산기
def calculator(a, b, operator):
if operator == "+":
return a + b
elif operator == "-":
return a - b
elif operator == "*":
return a * b
elif operator == "/":
return a / b
else:
return "지원하지 않는 연산자입니다."
print(calculator(10, 5, "+")) # 출력: 15
print(calculator(10, 5, "/")) # 출력: 2.0
2) 리스트의 최대값과 최소값 찾기
def find_max_min(numbers):
return max(numbers), min(numbers)
numbers = [3, 1, 4, 1, 5, 9]
max_val, min_val = find_max_min(numbers)
print(f"최대값: {max_val}, 최소값: {min_val}")
# 출력: 최대값: 9, 최소값: 1
6. 함수와 객체 지향 프로그래밍(OOP)의 관계
함수는 객체 지향 프로그래밍(OOP)의 핵심 구성 요소 중 하나로, 클래스와 객체 내부에서 중요한 역할을 합니다. OOP에서는 함수 대신 **메서드(method)**라는 용어를 주로 사용하며, 이는 특정 객체와 연관된 함수를 의미합니다. 함수와 OOP의 관계는 다음과 같습니다:
1) 클래스 내에서 함수의 역할
- 클래스는 데이터를 정의하고 조작하는 데 사용되며, 함수는 데이터 조작의 로직을 제공합니다.
- 클래스 내부에 정의된 함수는 메서드라고 불립니다.
class Calculator:
def __init__(self, a, b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
def subtract(self):
return self.a - self.b
calc = Calculator(10, 5)
print(calc.add()) # 출력: 15
print(calc.subtract()) # 출력: 5
2) 함수와 캡슐화
- 함수는 객체의 내부 데이터를 보호하고, 외부에서는 필요한 기능만 노출시키는 데 사용됩니다.
- 이는 캡슐화(encapsulation) 원칙을 구현하는 핵심 도구입니다.
3) 함수와 다형성
- 같은 이름의 메서드가 다른 클래스에서 다르게 동작하도록 정의할 수 있습니다.
- 이는 다형성(polymorphism)의 한 예입니다.
class Animal:
def sound(self):
pass
class Dog(Animal):
def sound(self):
return "멍멍"
class Cat(Animal):
def sound(self):
return "야옹"
animals = [Dog(), Cat()]
for animal in animals:
print(animal.sound())
# 출력:
# 멍멍
# 야옹
4) 함수와 상속
- 부모 클래스에서 정의한 함수를 자식 클래스가 상속받아 사용할 수 있습니다.
- 필요에 따라 자식 클래스에서 함수를 재정의(overriding)할 수도 있습니다.
class Parent:
def greet(self):
print("안녕하세요, 저는 부모입니다.")
class Child(Parent):
def greet(self):
print("안녕하세요, 저는 자식입니다.")
person = Child()
person.greet() # 출력: 안녕하세요, 저는 자식입니다.
요약
함수는 OOP에서 객체와 데이터 간의 상호작용을 가능하게 하는 중요한 역할을 합니다. 함수는 독립적으로도 유용하지만, 클래스와 결합될 때 더욱 강력한 도구로 작용합니다. 따라서 함수와 OOP의 개념을 함께 이해하면 더 효율적이고 확장 가능한 코드를 작성할 수 있습니다.
6. 결론
함수는 파이썬 프로그래밍에서 매우 중요한 개념입니다. 코드를 구조적으로 작성하고, 반복 작업을 줄이며, 가독성을 높이는 데 큰 도움을 줍니다. 이 튜토리얼을 통해 함수의 기본적인 작성법과 활용법을 익히셨길 바랍니다. 이제 직접 다양한 함수를 작성해 보며 실력을 키워 보세요!
'테크 > python basic' 카테고리의 다른 글
파이썬 리스트 추가와 삭제 (0) | 2025.01.22 |
---|---|
파이썬 문자열 찾기 메소드 가이드(find, rfind, startswith, endswith) (0) | 2025.01.22 |
조건문과 반복문: if, for, while 완벽 가이드 (1) | 2025.01.17 |
Python의 연산자: 산술, 비교, 논리 연산자를 이해하자 (0) | 2025.01.17 |
Python의 변수 활용과 객체 지향 프로그래밍 (OOP) (0) | 2025.01.16 |