본문 바로가기

Develop/Data analysis

[Python] Day 4: 함수와 예외 처리

함수와 예외 처리는 파이썬 프로그래밍에서 코드의 재사용성, 안정성, 가독성을 높이는 데 핵심적인 역할을 한다. 함수를 사용하면 반복되는 코드를 효율적으로 관리할 수 있으며, 예외 처리를 통해 오류 발생 시 프로그램의 예기치 않은 종료를 방지할 수 있다.

이번 글에서는 사용자 정의 함수, 다양한 인자 전달 방식(*args, **kwargs 포함), 그리고 try-except-finally를 활용한 예외 처리까지 폭넓게 살펴보고자 한다. 각 개념은 실습과 예제를 통해 직관적으로 이해할 수 있도록 구성하였다.

 

1. 함수 (Function)

1-1. 함수란 무엇인가?

함수는 특정 작업을 수행하는 코드 블록에 이름을 붙인 것으로, 필요할 때 호출하여 실행할 수 있다. 코드를 재사용 가능하게 만들며, 프로그램을 더 구조화하고 유지 보수하기 쉽게 만들어 준다.

1-2. 함수의 기본 구조

def 함수이름(매개변수):
    실행문
    return 반환값

2-3. 실습 예제: 간단한 인사 함수

def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))  # 출력: Hello, Alice!

2. 다양한 인자 전달 방식

2-1. 기본 인자 (Default Parameters)

기본값을 지정하면, 호출 시 값을 생략할 수 있다.

def introduce(name, age=20):
    print(f"{name} is {age} years old.")

introduce("Tom")        # 출력: Tom is 20 years old.
introduce("Anna", 25)   # 출력: Anna is 25 years old.

→ 기본값이 설정된 인자는 생략 가능하며, 필요에 따라 재정의할 수 있다.

2-2. 키워드 인자 (Keyword Arguments)

함수 호출 시 인자의 순서를 바꾸더라도, 키워드를 명시하면 정확하게 매칭된다.

def student(name, grade):
    print(f"{name}'s grade is {grade}")

student(grade="A", name="Bob")  # 출력: Bob's grade is A

2-3. args와 kwargs

  • *args: 가변 개수의 위치 인자를 튜플로 전달
  • **kwargs: 가변 개수의 키워드 인자를 딕셔너리로 전달
def show_args(*args):
    print("Args:", args)

def show_kwargs(**kwargs):
    print("Kwargs:", kwargs)

show_args(1, 2, 3)  # 출력: Args: (1, 2, 3)
show_kwargs(name="Tom", age=20)  # 출력: Kwargs: {'name': 'Tom', 'age': 20}

→ *args, **kwargs는 인자의 개수가 정해지지 않았거나 동적으로 전달되어야 할 때 유용하다.


3. 계산기 함수 만들기 (함수 + 조건문 활용)

조건문과 함수의 조합을 활용하면 보다 복잡한 로직도 깔끔하게 구현할 수 있다.

def calculator(a, b, op):
    if op == "+":
        return a + b
    elif op == "-":
        return a - b
    elif op == "*":
        return a * b
    elif op == "/":
        return a / b
    else:
        return "지원하지 않는 연산자입니다."

print(calculator(10, 5, "+"))  # 출력: 15
print(calculator(10, 5, "/"))  # 출력: 2.0
 

→ 함수 내부에서 연산자를 기준으로 분기 처리하며, 재사용 가능한 계산 함수가 완성된다.


4. 예외 처리 (try-except-finally)

4-1. 예외 처리의 필요성

실행 중 발생할 수 있는 오류를 사전에 처리함으로써, 프로그램의 갑작스러운 종료를 막고 사용자에게 의미 있는 메시지를 제공할 수 있다.

4-2. 기본 구조

try:
    실행할 코드
except 예외종류:
    예외 발생 시 실행
finally:
    항상 실행되는 블록

실습 예제: 0으로 나누기 처리

def safe_divide(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "0으로 나눌 수 없습니다."
    finally:
        print("나눗셈 시도 완료.")
    return result

print(safe_divide(10, 0))
나눗셈 시도 완료.  
0으로 나눌 수 없습니다.

→ except 블록에서 오류를 처리하고, finally는 예외 발생 여부와 관계없이 항상 실행된다.


함수와 예외 처리는 프로그래밍의 실용성과 안정성을 책임지는 핵심 기능이다. 함수를 통해 코드를 모듈화하고 재사용할 수 있으며, 다양한 인자 전달 방식을 활용하면 유연한 함수 구성이 가능해진다. 더불어 예외 처리를 통해 예상치 못한 오류를 효과적으로 제어함으로써, 사용자 경험을 개선하고 프로그램의 신뢰성을 높일 수 있다.

오늘의 핵심 정리

개념 설명
함수 정의 def 함수명(매개변수): 로 정의
기본 인자 기본값 설정 가능
*args 여러 개의 위치 인자를 튜플로 전달
**kwargs 여러 개의 키워드 인자를 딕셔너리로 전달
try-except 오류 발생에 대비해 코드 안정성 확보
finally 예외 발생 여부와 관계없이 항상 실행되는 블록

앞으로 함수와 예외 처리에 익숙해진다면, 더욱 견고하고 유지보수가 쉬운 파이썬 프로그램을 작성할 수 있게 될 것이다.