본문 바로가기

코딩과 AI와 자동화/코딩

파이썬 함수(Function) 사용법: def/return/매개변수 한 번에 정리 (파이썬 기초 5편)

반응형

이전 글「4편. 데이터 구조(리스트, 딕셔너리) 이해하기 – 파이썬 기초 코딩 필수 개념」에서 자료를 “담는 방법”을 배웠다면, 이번 편은 그 자료를 제대로 ‘굴리는 방법’ 입니다.

 

핵심 주제는 단 하나:

함수는 코드를 ‘읽기 쉬운 형태’로 바꿔주는 가장 강력한 도구다.


1) 왜 함수를 쓰면 코드가 훨씬 읽기 쉬워질까?

 

초보 때 가장 흔한 문제는 이겁니다.

  • 코드가 길어짐
  • 중간에 뭘 하고 있는지 “맥락”이 사라짐
  • 같은 로직을 복사/붙여넣기로 반복함

함수는 이 문제를 3가지 관점에서 해결합니다.

 

(1) “이름”이 생기면, 코드가 문장처럼 읽힌다

 

예를 들어 아래처럼 길게 쓰면 읽는 사람은 매번 해석해야 합니다.

  • 데이터를 받고 → 필터링하고 → 정렬하고 → 출력

하지만 함수로 나누면, 코드가 “설명서”처럼 바뀝니다.

  • load_data()
  • filter_users()
  • sort_by_score()
  • print_report()

함수 이름이 ‘주석’ 역할을 합니다.

(2) “입력과 출력”이 명확해지면 실수가 줄어든다

 

함수는 기본적으로 이런 계약(규칙)을 가집니다.

  • 입력(파라미터): 함수가 받는 값
  • 출력(return): 함수가 돌려주는 값

입출력이 명확해지면:

  • 어디에서 문제가 생겼는지 찾기 쉬워지고(디버깅)
  • 수정할 때도 한 부분만 고치면 됩니다(유지보수)

 

3) 재사용이 가능해져서, 같은 실수를 반복하지 않는다

 

복붙한 코드가 많아지면:

  • 한 군데만 수정해도 다른 군데는 그대로라서 버그가 생기기 쉽습니다.
    함수로 빼면 “수정은 한 번”입니다.

 

 


2) 함수 기본 문법: 딱 이 구조만 기억하면 된다

def 함수이름(입력1, 입력2):
    처리 로직
    return 출력
  • def: 함수를 정의한다
  • return: 함수가 결과를 돌려준다
  • return이 없으면 기본적으로 None을 돌려줍니다

 


3) 리스트·딕셔너리를 함수의 입력/출력으로 쓰면 “구조화”가 된다

이번 글의 핵심 파트입니다.
리스트·딕셔너리는 실무/프로젝트에서 제일 자주 쓰이는 형태고, 함수와 만나면 코드가 시스템처럼 돌아가기 시작합니다.

 

예제 시나리오: “회원 목록”을 정리해서 보고서 만들기

 

  • 입력: 사용자 정보 리스트(각 사용자 = 딕셔너리)
  • 처리: 활성 사용자만 필터 → 점수 기준 정렬 → 요약 통계 생성
  • 출력: 리스트/딕셔너리(보고서 데이터)

 

 

 


(1) 리스트를 입력으로 받고, 리스트를 출력하는 함수

def filter_active_users(users):
    """활성 사용자만 남긴 리스트를 반환"""
    result = []
    for u in users:
        if u["active"] == True:
            result.append(u)
    return result

 

포인트:

  • 함수는 원본 users를 직접 바꾸지 않고, 새 리스트를 만들어 반환하면 안전합니다.
  • “입력은 그대로, 출력은 새로”가 초보에게 가장 실수 없는 패턴입니다.

 

 

(2) 리스트를 입력으로 받고, 딕셔너리를 출력하는 함수

def summarize_scores(users):
    """점수 요약 통계를 dict로 반환"""
    scores = [u["score"] for u in users]
    if not scores:
        return {"count": 0, "avg": 0}

    avg = sum(scores) / len(scores)
    return {"count": len(scores), "avg": avg}

 

포인트:

  • 요약 결과는 dict가 제일 깔끔합니다.
  • 나중에 출력/저장/그래프에 그대로 쓰기 좋습니다.


4) “잘 구조화된 코드”의 기준 5가지

여기부터는 단순 문법이 아니라 코드 퀄리티 얘기입니다.

 

  1. 함수는 한 가지 일만 하게 만들기
  2. 함수 이름은 “무엇을 하는지”가 드러나게
  3. 입력/출력 타입(리스트/딕셔너리)을 고정하기
  4. 출력은 print가 아니라 return으로 돌려주기
  5. 예외 상황(빈 리스트 등)을 함수 내부에서 처리하기

 

이 5가지를 지키면, 초보 코드에서 “프로젝트 코드” 느낌이 납니다.


5) 작은 실전 예시: “보고서 만들기”를 함수 4개로 쪼개보기

def filter_active_users(users):
    return [u for u in users if u["active"]]

def sort_by_score(users):
    return sorted(users, key=lambda u: u["score"], reverse=True)

def summarize_scores(users):
    scores = [u["score"] for u in users]
    return {"count": len(scores), "avg": (sum(scores) / len(scores)) if scores else 0}

def build_report(users):
    active = filter_active_users(users)
    sorted_users = sort_by_score(active)
    summary = summarize_scores(sorted_users)
    return {"users": sorted_users, "summary": summary}

 

여기서 중요한 건 결과물입니다.

 

build_report() 하나만 호출하면:

  • 사용자 리스트(정리된 상태)
  • 요약 통계(dict)

가 한 번에 나옵니다.


이게 바로 “구조화”입니다.


다음 글 예고: 6편. 간단한 프로젝트 만들기

 

다음 6편에서는 지금까지 배운 걸 묶어서 작은 프로젝트 1개를 만듭니다.

6편에서 만들 프로젝트(예고)

 

-“할 일(To-Do) 관리 프로그램” 또는 “간단한 가계부 요약기”

1. 리스트/딕셔너리로 데이터를 저장하고

2. 함수로 입력/처리/출력을 분리해서

3. 작동하는 프로그램으로 완성합니다.

반응형