모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

12강 / 전체 32강

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

7분 읽기 조회 6

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
  • 누구나

📚 시리즈 전체 공유

파이썬 기초 40강 — 처음 배우는 프로그래밍

이 강의가 속한 시리즈는 총 32강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...