누구나 로고
オンライン講座企業・団体研修ライブラリトレンドインサイト無料コースお知らせお問い合わせ採用サイト
모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.
로그인무료 회원가입
강좌파이썬 기초 40강 — 처음 배우는 프로그래밍12강

12강 / 전체 14강

조건문 — 프로그램이 결정을 내리는 방법

7분 읽기 조회 0

if/elif/else의 실행 원리를 이해하고 조건 설계의 모범 사례를 배운다.

🎯 이 강의에서 배우는 것

프로그램이 결정을 내리는 방법 — 그것이 조건문입니다. 파이썬의 조건문은 들여쓰기로 블록을 정의하는 독특한 철학을 가집니다. if/elif/else의 정확한 실행 모델부터, 코드를 단순하게 만드는 가드 클로즈 패턴, Python 3.10의 구조적 패턴 매칭(match-case)까지 배웁니다.

🧠 들여쓰기가 블록을 정의하는 이유

C, Java, JavaScript는 중괄호 {}로 블록을 정의합니다. 파이썬은 들여쓰기(indentation)로 블록을 정의합니다. 코드의 시각적 구조가 논리적 구조와 일치해야 한다는 설계 철학입니다.

temperature = 28

if temperature >= 30:
    print("덥다!")
    print("에어컨 켜기")
elif temperature >= 20:
    print("따뜻하다")
    print("창문 열기")
elif temperature >= 10:
    print("선선하다")
    print("가벼운 외투 필요")
else:
    print("춥다!")
    print("두꺼운 외투 필요")

print("날씨 체크 완료")  # 항상 실행

들여쓰기 표준: PEP 8은 스페이스 4개를 권장합니다. 탭과 스페이스를 혼용하면 TabError가 발생합니다. VS Code, PyCharm 등 현대 IDE는 기본적으로 탭 키를 스페이스 4개로 변환합니다.

🏗️ if 문의 실행 모델

# 실행 흐름 정밀 분석
x = 5

if x > 10:        # 평가: False → 이 블록 건너뜀
    print("10 초과")
elif x > 3:        # 평가: True → 이 블록 실행
    print("3 초과 10 이하")  # 실행됨
elif x > 0:        # 이 조건은 평가조차 안 됨!
    print("0 초과 3 이하")   # 실행 안 됨
else:
    print("0 이하")  # 실행 안 됨

# 핵심: 첫 번째 True 조건의 블록만 실행됨
# 나머지 조건들은 평가하지 않음 (단락 평가와 유사)

💡 조건 표현식 (삼항 연산자)

age = 17
status = "성인" if age >= 18 else "미성년자"
print(status)   # 미성년자

# 함수 반환에 사용
def classify(score):
    return "합격" if score >= 60 else "불합격"

# 기본값 설정
user_input = ""
display_name = user_input if user_input else "손님"

# 중첩 조건 표현식 (3단계 이상이면 가독성 저하)
score = 75
grade = "A" if score >= 90 else "B" if score >= 80 else "C" if score >= 70 else "F"
# 이런 경우는 if-elif-else를 쓰는 것이 더 명확

🛡️ 가드 클로즈 패턴 (Guard Clause)

함수 초반에 예외 상황을 먼저 처리하고 early return하는 패턴입니다. 화살촉 코드(arrow code)를 평탄하게 만듭니다:

# 나쁜 예: 깊은 중첩 (arrow code / hadouken code)
def process_user_bad(user):
    if user is not None:
        if user.get("is_active"):
            if user.get("age", 0) >= 18:
                return f"{user['name']}님 처리 완료"
            else:
                return "미성년자"
        else:
            return "비활성 계정"
    else:
        return "사용자 없음"

# 좋은 예: 가드 클로즈 패턴 (Guard Clause)
def process_user(user):
    if user is None:         # 가드 1: 즉시 종료
        return "사용자 없음"
    if not user.get("is_active"):  # 가드 2: 즉시 종료
        return "비활성 계정"
    if user.get("age", 0) < 18:   # 가드 3: 즉시 종료
        return "미성년자"

    # 이 아래: 모든 가드를 통과한 정상 케이스
    return f"{user['name']}님 처리 완료"

🎯 match-case: 구조적 패턴 매칭 (Python 3.10+)

command = "go north"

match command.split():
    case ["quit"]:
        print("게임 종료")
    case ["go", direction]:        # 변수 캡처
        print(f"{direction} 방향으로 이동")
    case ["pick", "up", item]:
        print(f"{item} 획득")
    case ["drop", *items]:         # * 로 나머지 캡처
        print(f"버린 아이템: {items}")
    case _:                        # 기본값 (wildcard)
        print("모르는 명령")

# HTTP 상태 코드 분기
status_code = 404
match status_code:
    case 200 | 201 | 204:          # | 로 여러 값 매칭
        msg = "성공"
    case 400:
        msg = "잘못된 요청"
    case 401 | 403:
        msg = "인증/인가 오류"
    case 404:
        msg = "찾을 수 없음"
    case 500:
        msg = "서버 오류"
    case _ if status_code >= 400:  # 가드 조건
        msg = f"기타 오류 ({status_code})"
    case _:
        msg = "알 수 없음"
print(msg)

🔍 조건 단순화 원칙

# 불필요한 비교 제거
is_valid = True

# 나쁜 예
if is_valid == True:
    print("유효")

# 좋은 예
if is_valid:
    print("유효")

# 드모르간 법칙 활용
# not (A and B) == not A or not B
# not (A or B) == not A and not B

# 복잡한 조건 → 설명적 변수로 분리
age = 25
income = 50000
credit_score = 750

# 복잡한 인라인 조건 (읽기 어려움)
if age >= 20 and income >= 30000 and credit_score >= 700:
    approve_loan()

# 설명적 변수로 분리 (읽기 쉬움)
is_adult = age >= 20
has_sufficient_income = income >= 30000
has_good_credit = credit_score >= 700

if is_adult and has_sufficient_income and has_good_credit:
    approve_loan()

⚠️ 자주 하는 실수

  • = 와 == 혼동: if x = 5:는 SyntaxError. 비교는 반드시 ==.
  • 들여쓰기 일관성 없음: 탭과 스페이스 혼용 금지. 스페이스 4개로 통일.
  • else 없이 if만 사용: 모든 조건이 False면 암묵적으로 None이 반환됩니다. 의도적이지 않으면 else를 명시하거나 가드 클로즈를 사용하세요.

📝 정리 및 다음 강의 예고

  • 파이썬의 들여쓰기는 선택이 아닌 문법입니다. 스페이스 4개를 사용하세요.
  • 가드 클로즈 패턴으로 중첩을 줄이고 코드를 평탄하게 만드세요.
  • Python 3.10+의 match-case는 복잡한 조건 분기를 우아하게 표현합니다.

다음 강의: while 루프의 정확한 실행 모델과 루프 불변식(loop invariant) 개념으로 올바른 루프를 설계하는 방법을 배웁니다.

관련 주제

  • if/elif/else 실행흐름
  • 들여쓰기 블록 구조
  • 조건 표현식(삼항연산자)
  • 가드 클로즈 패턴
  • match-case 패턴매칭
  • 매직넘버 제거
  • 개발·프로그래밍
  • 개발·프로그래밍 강의
  • 파이썬 기초 40강 — 처음 배우는 프로그래밍
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나
이전 11강f-string과 문자열 포맷팅 완전 정복다음 13강 while 루프 — 반복의 본질과 루프 설계

댓글

0/1000

불러오는 중...

목차

  1. 1.컴퓨터는 어떻게 생각하는가 — 0과 1에서 프로그램까지
  2. 2.파이썬 생태계와 개발 환경 완전 설정
  3. 3.파이썬의 실행 모델 — 바이트코드, PVM, GIL
  4. 4.첫 프로그램 — print()와 input()으로 배우는 I/O 원리
  5. 5.변수란 무엇인가 — 이름표, 객체, 참조의 삼각관계
  6. 6.정수(int) 완전 해부 — 임의 정밀도, 비트 연산, 정수 연산의 함정
  7. 7.부동소수점(float)의 함정 — IEEE 754와 수치 오류의 진실
  8. 8.문자열(str) 완전 해부 — 유니코드, 불변성, 인코딩
  9. 9.불리언(bool)과 None — 진리값 시스템의 철학
  10. 10.연산자 완전 분석 — 우선순위, 결합성, 연산자 오버로딩 예고
  11. 11.f-string과 문자열 포맷팅 완전 정복
  12. 12.조건문 — 프로그램이 결정을 내리는 방법
  13. 13.while 루프 — 반복의 본질과 루프 설계
  14. 14.for 루프 — 이터레이션 프로토콜의 깊은 이해

カスタマーサポート

  • お知らせ
  • よくある質問
  • お問い合わせ
  • コミュニティ

ご利用案内

  • 利用規約
  • プライバシーポリシー
  • 返金ポリシー

サービス

  • 会社紹介
  • 新規登録
  • 新着コース
  • 無料コース
누구나 로고
利用規約プライバシーポリシー返金ポリシー

상호명: NUGUNA  |  대표자: 정우진  |  사업자등록번호: 392-32-01817  |  통신판매업신고: 제 2026-서울양천-0564 호

주소: 서울특별시 양천구 목동서로 100  |  이메일: nugunapass@gmail.com  |  전화: 010-6395-3043

© 2026 NUGUNA. All rights reserved.

KB예금주인증관리자
ホームコースライブラリお問い合わせMY