[SWE-002][입문] 읽기 쉬운 이름·함수·모듈 만들기 > IT 기술 공유

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

IT 기술 공유

[SWE-002][입문] 읽기 쉬운 이름·함수·모듈 만들기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 258회 작성일 26-08-30 03:34

본문

[이번 수업]

코드가 동작하는 데서 한 걸음 더 나아가 다른 사람이 의도를 빠르게 이해하도록 이름을 짓고, 함수를 한 역할로 나누고, 관련 코드를 모듈로 묶는 방법을 배웁니다.

[선수지식]

SWE-001의 요구사항·변경 개념과 Python 변수·조건문·함수·import 기초를 알면 됩니다.

[학습목표]

1. 이름만 보고 값과 동작의 의도를 추측할 수 있게 작성한다.
2. 입력·검증·계산·출력이 섞이지 않도록 함수를 나눈다.
3. 관련 기능을 모듈로 묶고 실행 진입점을 분리한다.


[핵심개념]

좋은 이름은 코드가 무엇을 의미하는지 드러냅니다. x, tmp, do 같은 이름보다 subtotal, discount, calculate_total처럼 업무 뜻이 보이는 이름이 낫습니다. Python의 PEP 8은 함수와 변수에 소문자 snake_case, 클래스에 CapWords, 상수에 대문자와 밑줄을 권합니다. 규칙 자체보다 프로젝트 전체에서 일관되게 쓰는 것이 중요합니다.

함수는 이름 붙은 작은 동작입니다. 매개변수로 입력을 받고 return으로 결과를 돌려주면 데이터 흐름을 따라가기 쉽습니다. 검증, 계산, 출력이 한 함수에 모두 들어가면 고치고 시험하기 어렵습니다. 아래에서는 금액 검증과 최종 계산을 분리하고 출력은 app.py에 둡니다.

모듈은 Python 코드 파일입니다. 관련 함수와 상수를 pricing.py에 묶으면 다른 프로그램에서도 import해 재사용할 수 있습니다. app.py는 사용자 흐름을 조립하는 진입점 역할만 맡습니다. if __name__ == "__main__" 조건을 사용하면 app.py를 직접 실행할 때만 main이 호출되고, 다른 코드가 import할 때는 실행 부작용이 생기지 않습니다.

모듈 경계는 함께 바뀌는 코드를 모으고 다른 부분과의 의존성을 줄이는 방향으로 정합니다. 파일 개수가 많다고 설계가 좋아지는 것은 아닙니다. 순환 import가 생기거나 공통 모듈이 모든 것을 아는 구조라면 책임을 다시 살펴봅니다.

[따라하기]

같은 폴더에 pricing.py와 app.py를 만듭니다. pricing.py에는 다음을 저장하세요.

TAX_RATE = 0.10

def validate_amount(name, value):
    """금액이 음수가 아닌지 확인한다."""
    if value < 0:
        raise ValueError(f"{name}은(는) 0 이상이어야 합니다")

def calculate_total(subtotal, discount=0.0):
    """할인 후 세금을 더한 최종 금액을 반환한다."""
    validate_amount("subtotal", subtotal)
    validate_amount("discount", discount)
    discounted_amount = max(subtotal - discount, 0)
    return round(discounted_amount * (1 + TAX_RATE), 2)

app.py에는 다음을 저장하세요.

from pricing import calculate_total

def main():
    subtotal = 10000
    discount = 1000
    total = calculate_total(subtotal, discount)
    print(f"결제 금액: {total:.2f}원")

if __name__ == "__main__":
    main()

Windows에서는 다음을 실행합니다.

py -m py_compile pricing.py app.py
py app.py

macOS·Linux에서는 python3로 바꿉니다.

python3 -m py_compile pricing.py app.py
python3 app.py

py_compile은 문법 오류가 있으면 알려 주고, 정상 실행 결과는 결제 금액: 9900.00원입니다.

[흔한 실수]

첫째, 짧기만 한 이름을 좋은 이름으로 생각합니다. 둘째, 함수 이름은 calculate인데 출력·파일 저장까지 숨겨 수행합니다. 셋째, 의미 없는 주석으로 모호한 코드를 덮습니다.

[보안 주의]

비밀번호·API 키를 상수나 모듈 전역에 넣어 저장소에 올리지 마세요. 외부 입력은 계산 함수 경계에서 타입·범위·길이를 검증하고 오류 메시지에 민감한 값을 포함하지 않습니다. Python 모듈은 import할 때 최상위 코드가 실행될 수 있으므로 출처를 모르는 파일이나 패키지를 가져오지 마세요. 사용자 문자열을 eval이나 exec로 실행하지 않습니다.

[직접 해볼 과제]

배송비를 계산하는 calculate_shipping 함수를 pricing.py에 추가하고 main에서 최종 결제액과 함께 출력하세요. 무료배송 기준과 배송비를 뜻이 드러나는 상수로 만들고, 음수 subtotal을 넣었을 때 ValueError가 발생하는지도 확인하세요.

[확인문제]

1. subtotal이 x보다 읽기 쉬운 이유는 무엇인가요?
2. 계산과 출력을 서로 다른 함수·모듈에 두면 어떤 장점이 있나요?
3. __main__ 조건은 직접 실행과 import에서 어떤 차이를 만드나요?

[다음 학습]

순환 커리큘럼의 다음 글은 MOBILE-002 네이티브·크로스플랫폼 선택입니다. 소프트웨어 공학 트랙에서는 SWE-003 단위·통합·E2E 테스트로 이어집니다.

[공식 참고 자료]

PEP 8 Python 스타일 가이드
https://peps.python.org/pep-0008/

PEP 257 Docstring 규칙
https://peps.python.org/pep-0257/

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

Python 모듈
https://docs.python.org/3/tutorial/modules.html

Python import 시스템
https://docs.python.org/3/reference/import.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

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

접속자집계

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