함수 (Functions)

2025. 3. 26. 02:42Programming Languages/Python

함수(Functions)

1. 함수란 무엇인가?

함수는 특정 작업을 수행하는 코드 블록으로, 프로그램에서 반복적으로 사용할 수 있습니다. 함수를 사용하면 코드의 재사용성이 높아지고, 프로그램의 구조가 명확해집니다.

함수의 주요 장점:

  • 코드 재사용: 동일한 코드를 여러 번 작성할 필요가 없음
  • 모듈화: 프로그램을 논리적 단위로 분할
  • 가독성 향상: 코드의 목적을 명확하게 표현
  • 유지보수 용이: 수정이 필요할 때 한 곳만 변경하면 됨

2. 함수 정의와 호출

함수 정의 방법

def 함수이름(매개변수1, 매개변수2, ...):
    """함수에 대한 설명 (독스트링)"""
    # 실행할 코드
    return 반환값  # 선택 사항

간단한 함수 예제

def 인사하기():
    """인사말을 출력하는 간단한 함수"""
    print("안녕하세요!")

# 함수 호출
인사하기()  # 출력: 안녕하세요!

매개변수가 있는 함수

def 이름으로_인사하기(이름):
    """이름을 받아 개인화된 인사말을 출력하는 함수"""
    print(f"안녕하세요, {이름}님!")

# 함수 호출
이름으로_인사하기("철수")  # 출력: 안녕하세요, 철수님!

반환값이 있는 함수

def 합계(a, b):
    """두 수의 합을 반환하는 함수"""
    return a + b

# 함수 호출과 반환값 사용
결과 = 합계(5, 3)
print(결과)  # 출력: 8

3. 매개변수(Parameters)와 인수(Arguments)

위치 인수(Positional Arguments)

인수의 위치에 따라 매개변수에 할당됩니다.

def 정보_출력(이름, 나이, 직업):
    print(f"이름: {이름}, 나이: {나이}, 직업: {직업}")

정보_출력("김철수", 25, "개발자")  # 출력: 이름: 김철수, 나이: 25, 직업: 개발자

키워드 인수(Keyword Arguments)

매개변수 이름을 명시적으로 지정하여 인수를 전달합니다.

정보_출력(나이=25, 직업="개발자", 이름="김철수")  # 출력: 이름: 김철수, 나이: 25, 직업: 개발자

기본값 매개변수(Default Parameters)

매개변수에 기본값을 설정할 수 있습니다.

def 인사말(이름, 인사="안녕하세요"):
    print(f"{인사}, {이름}님!")

인사말("철수")  # 출력: 안녕하세요, 철수님!
인사말("영희", "반갑습니다")  # 출력: 반갑습니다, 영희님!

가변 인수(*args)

임의 개수의 위치 인수를 튜플로 받습니다.

def 합계_계산(*숫자들):
    """여러 숫자의 합을 계산하는 함수"""
    print(f"숫자들: {숫자들}, 타입: {type(숫자들)}")
    합계 = 0
    for 숫자 in 숫자들:
        합계 += 숫자
    return 합계

print(합계_계산(1, 2, 3, 4, 5))  # 출력: 15

키워드 가변 인수(**kwargs)

임의 개수의 키워드 인수를 딕셔너리로 받습니다.

def 개인정보(**정보):
    """사람의 정보를 출력하는 함수"""
    print(f"정보: {정보}, 타입: {type(정보)}")
    for 키, 값 in 정보.items():
        print(f"{키}: {값}")

개인정보(이름="김철수", 나이=25, 직업="개발자", 취미="독서")

4. 함수의 반환값

단일 값 반환

def 제곱(숫자):
    """숫자의 제곱을 반환하는 함수"""
    return 숫자 ** 2

결과 = 제곱(4)
print(결과)  # 출력: 16

여러 값 반환

함수는 튜플을 사용하여 여러 값을 반환할 수 있습니다.

def 사칙연산(a, b):
    """두 숫자의 사칙연산 결과를 반환하는 함수"""
    덧셈 = a + b
    뺄셈 = a - b
    곱셈 = a * b
    나눗셈 = a / b if b != 0 else "나눗셈 불가"
    return 덧셈, 뺄셈, 곱셈, 나눗셈

결과 = 사칙연산(10, 2)
print(결과)  # 출력: (12, 8, 20, 5.0)

# 언패킹을 사용하여 값을 개별 변수에 할당
덧셈, 뺄셈, 곱셈, 나눗셈 = 사칙연산(10, 2)
print(f"덧셈: {덧셈}, 뺄셈: {뺄셈}, 곱셈: {곱셈}, 나눗셈: {나눗셈}")

return 없는 함수

함수에 return 문이 없으면 None을 반환합니다.

def 인사_출력(이름):
    """인사말만 출력하고 반환값이 없는 함수"""
    print(f"안녕하세요, {이름}님!")

결과 = 인사_출력("철수")
print(결과)  # 출력: None

5. 함수의 범위(Scope)와 변수 수명

지역 변수(Local Variables)

함수 내에서 정의된 변수는 함수 외부에서 접근할 수 없습니다.

def 함수():
    지역변수 = "함수 내부에서만 접근 가능"
    print(지역변수)

함수()  # 출력: 함수 내부에서만 접근 가능
# print(지역변수)  # 오류 발생: 지역변수는 정의되지 않음

전역 변수(Global Variables)

함수 외부에서 정의된 변수로, 함수 내에서도 접근(읽기)할 수 있습니다.

전역변수 = "함수 외부에서 정의됨"

def 함수():
    print(전역변수)  # 전역 변수 읽기

함수()  # 출력: 함수 외부에서 정의됨

global 키워드

함수 내에서 전역 변수를 수정하려면 global 키워드를 사용합니다.

카운터 = 0

def 카운터_증가():
    global 카운터  # 전역 변수를 수정하기 위해 global 키워드 사용
    카운터 += 1
    print(f"현재 카운터: {카운터}")

카운터_증가()  # 출력: 현재 카운터: 1
카운터_증가()  # 출력: 현재 카운터: 2

nonlocal 키워드

중첩 함수에서 외부 함수의 변수를 수정할 때 사용합니다.

def 외부함수():
    외부변수 = 10
    
    def 내부함수():
        nonlocal 외부변수  # 외부 함수의 변수를 수정하기 위해 nonlocal 키워드 사용
        외부변수 += 5
        print(f"내부함수에서 수정된 값: {외부변수}")
    
    내부함수()
    print(f"외부함수에서의 값: {외부변수}")

외부함수()
# 출력:
# 내부함수에서 수정된 값: 15
# 외부함수에서의 값: 15

 

'Programming Languages > Python' 카테고리의 다른 글

재귀 함수(Recursive Functions)  (0) 2025.03.26
람다 함수(Lambda Functions)  (0) 2025.03.26
collections 모듈의 특수 컬렉션  (0) 2025.03.26
집합 (Sets)  (1) 2025.03.26
딕셔너리 (Dictionaries)  (1) 2025.03.26