-
Python 마스터 시리즈 6화 – 함수 정의와 호출, 매개변수와 반환 구조 설계하기기술과 산업/언어 및 프레임워크 2025. 5. 5. 13:40728x90
파이썬 함수 정의와 호출 구조를 단순한 문법 수준이 아닌 설계 관점에서 해석합니다. 다양한 매개변수 처리 방식, 반환값 구성, 그리고 실무에서 함수 구조를 어떻게 조직적으로 설계해야 하는지까지 분석합니다.
1. 도입 – 함수는 코드의 구조화 도구다
초급 개발자에게 함수는 “중복 코드를 줄이기 위한 블록”으로 보이지만,
전문가에게 함수는 로직을 분해하고, 명세화하며, 테스트 가능한 단위로 구성하는 기본 단위다.
즉, 함수는 단지 코드를 감싸는 것이 아니라
정보 흐름을 제어하고 시스템을 구조화하는 핵심 수단이다.
이번 글에서는 파이썬의 함수 정의 방식과 더불어,
현업에서 안정적이고 유지보수 가능한 함수를 어떻게 설계하는지 집중적으로 다룬다.
2. 본문 – 함수 정의와 구성 요소 이해
2.1 함수 기본 정의와 호출
def greet(): print("Hello")
- def 키워드로 함수 정의 시작
- 함수 이름, 소괄호(인자 목록), 콜론(:) 이후 들여쓰기된 블록
- 호출 시에는 greet() 형태로 사용
2.2 매개변수와 인자 (Parameters vs Arguments)
def greet(name): print(f"Hello, {name}")
- name은 매개변수(parameter), 함수 정의 시 사용
- greet("Alice")에서 "Alice"는 인자(argument), 호출 시 전달
2.3 다양한 인자 처리 방식
구분문법설명
기본 인자 def f(x=10) 값을 지정하지 않아도 기본값 사용 가변 인자 def f(*args) 여러 개 인자를 튜플 형태로 수용 키워드 인자 def f(**kwargs) 이름 있는 인자를 딕셔너리로 수용 혼합 사용 def f(a, b=0, *args, **kwargs) 순서와 구조를 명확히 이해해야 함 예시:
def report(title="No Title", *items, **metadata): print("제목:", title) print("항목:", items) print("기타 정보:", metadata) report("주간보고서", "매출", "방문자 수", author="홍길동", date="2025-04-28")
2.4 반환값 처리 – return 문
def add(x, y): return x + y
- 함수는 항상 None을 반환하되, return 문을 명시하면 원하는 값을 반환한다
- 여러 값을 반환하면 튜플(tuple) 형태로 묶인다
def calc(x, y): return x + y, x * y a, b = calc(3, 4) # a = 7, b = 12
- 함수가 값을 반환해야 하는지, 상태만 변경하는지 설계 기준을 명확히 해야 한다
2.5 함수 설계 원칙 – 실전 관점
1) 단일 책임 원칙(Single Responsibility)
def calculate_tax(income): # 세금만 계산
- 하나의 함수는 하나의 역할만 수행해야 한다
- 여러 책임이 섞이면 테스트, 재사용, 디버깅이 모두 어려워진다
2) 명확한 입력과 출력
def validate_user(user_data): # True/False 반환
- 함수의 결과는 언제나 예측 가능하고 일관되어야 한다
- 부작용(side-effect)은 최소화하거나 함수명으로 명확히 표현
3) 독립성과 재사용성 확보
def is_even(n): return n % 2 == 0
- 외부 상태나 글로벌 변수에 의존하지 않아야 함
- 테스트 및 모듈화 가능성 고려
3. 인사이트 – 좋은 함수는 ‘읽기 쉬운 로직’으로부터 시작된다
함수는 단순히 반복 코드를 줄이기 위한 구조물이 아니라
로직의 의도를 드러내고, 협업과 유지보수를 가능하게 하는 최소 단위다.
다음은 실제로 코드 리뷰에서 자주 언급되는 함수 설계 점검 항목이다.
체크리스트설명
이름이 기능을 정확히 설명하는가 calculate_tax() vs f1() 하나의 역할만 수행하는가 하나의 함수 안에 계산 + 출력 → 나쁘다 매개변수 개수는 최소한인가 3개 이상이면 구조화 필요 고려 반환값의 타입과 의미가 명확한가 혼합 타입 반환은 의도 명시 내부 로직이 너무 길지 않은가 10줄 이상이면 함수 분리 검토 이러한 점검 기준을 바탕으로 함수를 작성하면,
코드는 단순히 돌아가는 수준을 넘어서 구조적 품질을 갖춘 시스템으로 발전한다.
4. 정리
- 함수는 구조화된 코드의 기본 단위로, 단순한 중복 제거 이상의 역할을 한다
- 파이썬의 유연한 인자 처리 기능은 실전 설계에 강력한 무기를 제공하지만, 정확한 규칙 이해가 선행돼야 한다
- 좋은 함수는 명확한 입력/출력 구조, 단일 책임, 재사용성을 기반으로 설계된다
- 실제 업무에서는 함수 길이보다 역할 명확성, 호출 흐름의 간결성이 더 중요하다
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
전자정부 표준프레임워크 시리즈 5화 – 버전별 주요 변화와 특징 정리: 3.0에서 4.3까지 무엇이 달라졌는가 (0) 2025.05.06 JHipster 시리즈 2화 - JHipster 설치와 프로젝트 생성 – 모놀리식 앱 실습 (1) 2025.05.05 NestJS 마스터 시리즈 10화. 미들웨어와 인터셉터 – 요청 흐름을 설계하는 법 (0) 2025.05.05 FastAPI 시리즈 6화 - Path, Query, Header, Cookie 파라미터 제대로 다루기 (0) 2025.05.05 Spring Boot 시리즈 26편 – 운영 환경 로그 전략: Logback, 로그 분리, Cloud 환경 대응까지 (0) 2025.05.05