[CS-003][입문] 함수의 입력과 출력 이해하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[CS-003][입문] 함수의 입력과 출력 이해하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 259회 작성일 26-08-30 07:33

본문

[이번 수업]

계산을 함수로 묶고, 함수에 전달하는 입력과 함수가 돌려주는 출력을 구분합니다. 입력값을 검증해 합계를 계산하는 Python 프로그램을 만듭니다.

[선수지식]

CS-001의 변수·값·자료형과 CS-002의 조건문을 읽으세요.

[학습목표]

1. 함수 정의와 함수 호출을 구분한다.
2. 매개변수·인수·반환값을 쉬운 말로 설명한다.
3. 입력, 검증, 계산, 화면 출력을 나눠 작성한다.

[핵심개념]

함수는 이름이 붙은 코드 묶음입니다. Python에서는 def 뒤에 함수 이름과 매개변수를 쓰고, 들여쓴 본문에 할 일을 적습니다. 정의는 할 일을 등록하는 것이고 호출은 괄호를 붙여 실행하는 것입니다.

매개변수는 함수 정의에 적는 입력 자리의 이름이고, 인수는 호출할 때 그 자리에 실제로 전달하는 값입니다. calculate_total(price, quantity)에서 price와 quantity는 매개변수이며 calculate_total(1200, 3)의 1200과 3은 인수입니다.

return은 함수 실행을 끝내고 호출한 곳으로 값을 돌려줍니다. print는 값을 돌려주는 기능이 아니라 표준 출력이라는 화면 통로에 글자를 씁니다. 계산 함수가 print만 하면 결과를 다른 계산이나 테스트에서 다시 쓰기 어렵습니다. 반대로 반환값을 만들고 호출부에서 출력하면 같은 함수를 화면, 파일, 웹 API 등 여러 곳에서 활용할 수 있습니다.

프로그램 전체의 입력과 함수의 입력은 구분해야 합니다. input은 사용자가 입력한 한 줄을 문자열로 읽습니다.

[따라하기]

function_io.py에 다음을 저장하세요.

def parse_whole_number(text: str, maximum: int) -> int:
    text = text.strip()
    if not text or len(text) > 10:
        raise ValueError("1~10자리 숫자를 입력하세요")
    if not text.isascii() or not text.isdecimal():
        raise ValueError("0 이상의 정수만 입력하세요")

    value = int(text)
    if value > maximum:
        raise ValueError(f"{maximum} 이하로 입력하세요")
    return value

def calculate_total(price: int, quantity: int) -> int:
    return price * quantity

try:
    price = parse_whole_number(input("가격: "), 10_000_000)
    quantity = parse_whole_number(input("수량: "), 1_000)
    total = calculate_total(price, quantity)
except ValueError as error:
    print("입력 오류:", error)
else:
    print(f"합계: {total:,}원")

Windows는 py function_io.py, macOS·Linux는 python3 function_io.py로 실행합니다. 가격에 1200, 수량에 3을 입력하면 다음 결과가 나옵니다.

가격: 1200
수량: 3
합계: 3,600원

parse_whole_number는 문자열과 최댓값을 입력받아 검증된 정수를 반환합니다. calculate_total은 두 정수를 받아 곱한 값을 반환하며 화면을 바꾸지 않습니다. 마지막 호출부가 키보드 입력과 화면 출력을 담당합니다.

[흔한 실수]

첫째, 함수를 정의만 하고 호출하지 않습니다. 둘째, return과 print를 같은 것으로 생각합니다. 셋째, 모든 값을 전역변수에서 읽어 함수의 입력이 보이지 않게 만듭니다. 다섯째, 정상 입력만 가정해 빈 문자열·음수·너무 큰 값에서 프로그램이 멈춥니다.

[보안 주의]

모든 외부 입력은 신뢰하지 말고 허용 형식, 길이, 숫자 범위를 함께 검사하세요. 이 예제는 ASCII 숫자와 업무상 정한 최댓값만 허용합니다. 실제 서버에서는 브라우저 검사를 통과한 값도 서버에서 다시 검증해야 합니다. 입력 문자열을 eval이나 exec에 넘기지 말고, 오류 메시지에 비밀번호·토큰·개인정보를 넣지 않습니다.

[직접 해볼 과제]

할인율을 0~50 사이 정수로 입력받는 parse_discount 함수를 추가하세요. calculate_total이 할인된 금액을 반환하도록 바꾸고, 가격 1200·수량 3·할인율 10일 때 3240이 되는지 확인하세요. 빈 값, 51, -1도 넣어 오류 처리를 기록합니다.

[확인문제]

1. 매개변수와 인수는 어떻게 다른가요?
2. return과 print는 각각 무엇을 하나요?
3. 키보드 입력 검증과 합계 계산을 별도 함수로 나누면 무엇이 좋아지나요?

[다음 학습]

다음 글은 TOOL-003 패키지 관리자와 의존성입니다. CS 트랙에서는 CS-004 배열·리스트·스택·큐로 이어집니다.

[공식 참고 자료]

Python 함수 정의 튜토리얼
https://docs.python.org/3/tutorial/controlflow.html#defining-functions

Python 함수 정의 언어 레퍼런스
https://docs.python.org/3/reference/compound_stmts.html#function-definitions

Python input 문서
https://docs.python.org/3/library/functions.html#input

Python print 문서
https://docs.python.org/3/library/functions.html#print

Python int 문서
https://docs.python.org/3/library/functions.html#int

OWASP 입력값 검증 지침
https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
997
어제
5,103
최대
16,772
전체
772,051
Copyright © 소유하신 도메인. All rights reserved.