1. 함수의 개요 및 필요성

  • 정의: 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것 (프로그램의 빌딩 블록)

  • 구조: 입력(Input) → [함수: 처리] → 출력(Output/Return)

  • 필요성

    • 코드의 재사용성 증가 (동일한 처리를 반복할 때 유용)
    • 복잡한 문제를 단순한 부분으로 분해하여 해결 가능 (구조화 프로그래밍)
    • 소스 코드의 중복을 제거하여 유지보수가 용이함
  • 코드를 묶는 방법 3가지

    1. 함수(Function): 반복되는 코드를 묶음
    2. 객체(Object): 관련된 변수와 함수를 묶음
    3. 모듈(Module): 함수나 객체들을 소스 파일 안에 모음

2. 함수의 작성 및 호출

  • 함수 정의(Syntax)
def 함수이름(매개변수1, 매개변수2...):
	명령문1
	명령문2
	return 반환값
  • 함수 호출(Call)

    • 함수이름(인수) 형태로 실행하며, 실행 후 호출한 위치로 복귀함
  • 실행 순서

    • 파이썬은 인터프리터 언어이므로 함수가 호출되기 전에 정의되어 있어야 함
    • (단, 함수 내부에서 아직 정의되지 않은 다른 함수를 호출하는 것은 가능)
  • pass 키워드

    • 함수의 헤더만 작성하고 몸체는 나중에 작성할 때 사용

3. 인수(Argument)와 매개변수(Parameter)

  • 용어 구분

    • 매개변수(Parameter): 함수 정의 시 값을 전달받는 변수
    • 인수(Argument): 함수 호출 시 실제로 전달하는 값
  • 값의 전달

    • 함수에 값을 전달해도 원본 변수의 값(불변 객체인 경우)은 변경되지 않음
    • (Call by value와 유사한 동작)
  • 다양한 인수의 형태

    1. 디폴트 인수(Default Argument)
      • 매개변수에 기본값을 설정 (def func(msg="기본값"):)
      • 인수를 생략하면 기본값이 사용됨
    2. 키워드 인수(Keyword Argument)
      • 인수의 이름을 명시하여 값 전달 (func(x=10, y=20))
      • 순서가 바뀌어도 상관없음
    3. 가변 인수(Variable Argument, *args)
      • 개수가 정해지지 않은 인수를 튜플 형태로 받음
    4. 키워드 가변 인수(**kwargs)
      • 키워드 인수들을 딕셔너리 형태로 받음
  • 언패킹(Unpacking)

    • 리스트 앞에 *를 붙이면 요소를 풀어서 전달
    • 딕셔너리 앞에 **를 붙이면 키워드 인수로 전달

4. 값의 반환(Return)

  • 반환값이 없는 경우

    • return만 쓰거나 생략하면 None이 반환되며 함수가 종료됨
  • 단일 값 반환

    • return 값
  • 다중 값 반환

    • 파이썬은 여러 개의 값을 튜플 형태로 반환 가능 (return 1, 2, 3)
    • 받을 때: a, b, c = func() 형태로 언패킹하여 수신

5. 변수의 범위(Scope)

  • 전역 변수(Global Variable)

    • 함수 외부에서 정의된 변수
    • 프로그램 전체에서 접근 가능
  • 지역 변수(Local Variable)

    • 함수 내부에서 정의된 변수
    • 함수가 종료되면 사라짐
  • 함수 내 전역 변수 사용 규칙

    • 단순히 읽기(Read)는 가능
    • 함수 내부에서 전역 변수의 값을 변경(Write)하려면 global 키워드를 사용해야 함 (예: global gx)
    • global 선언 없이 값을 할당하면 새로운 지역 변수가 생성됨

6. 순환 호출(Recursion)

  • 정의: 함수가 자기 자신을 다시 호출하는 기법
  • 특징: 복잡한 알고리즘을 단순하게 표현 가능 (예: 팩토리얼 계산, 프랙탈 그래픽 등)
  • 주의: 종료 조건(Base case)이 없으면 무한 루프에 빠짐