OPEN HYPER STEP
← 목록으로 (math)
MATH · 10 / 15
math
CHAPTER 10 / 15
읽기 약 2
FUNCTION

진리표: if/else를 표로 정리하기


핵심 개념

진리표로 복잡한 조건문 분석 — 불필요한 분기 발견 + 누락된 케이스 식별.

본문

진리표 작성법

📋 코드 (19줄)
변수 N개 → 행 2^N개

2개 변수: 4행
A | B
T | T
T | F
F | T
F | F

3개 변수: 8행
A | B | C
T | T | T
T | T | F
T | F | T
T | F | F
F | T | T
F | T | F
F | F | T
F | F | F

5가지 기본 게이트 진리표

PYTHON📋 코드 (23줄)
# 코드로 진리표 생성

def truth_table_2var():
    print(f"{'A':^3} {'B':^3} {'AND':^4} {'OR':^4} {'XOR':^4} {'NAND':^5} {'NOR':^4}")
    print("-" * 35)
    for a in [True, False]:
        for b in [True, False]:
            and_  = a and b
            or_   = a or b
            xor_  = a != b  # XOR
            nand_ = not (a and b)
            nor_  = not (a or b)
            print(f"{str(a)[0]:^3} {str(b)[0]:^3} {str(and_)[0]:^4} {str(or_)[0]:^4} {str(xor_)[0]:^4} {str(nand_)[0]:^5} {str(nor_)[0]:^4}")


truth_table_2var()
# 결과:
#  A   B   AND  OR  XOR  NAND  NOR
# -----------------------------------
#  T   T    T   T    F    F    F
#  T   F    F   T    T    T    F
#  F   T    F   T    T    T    F
#  F   F    F   F    F    T    T

복잡한 if문 → 진리표 분석

PYTHON📋 코드 (30줄)
# 실전 — 결제 시스템 권한 체크
def can_refund(is_admin, is_owner, days_since_purchase, amount):
    """
    환불 가능 조건:
    - 관리자이거나
    - 본인이고 7일 이내이고 5만원 이하
    - 본인이고 30일 이내이고 1만원 이하
    """
    if is_admin:
        return True
    if is_owner and days_since_purchase <= 7 and amount <= 50000:
        return True
    if is_owner and days_since_purchase <= 30 and amount <= 10000:
        return True
    return False


# 진리표로 분석 — 변수 4개 = 2^4 = 16 케이스
# (단순화 위해 days를 7이하/8~30/30초과 3등급, amount를 1만이하/1~5만/5만초과 3등급)

import itertools

print(f"{'admin':^6} {'owner':^6} {'days':^10} {'amount':^10} {'결과':^6}")
print("-" * 45)
for admin in [True, False]:
    for owner in [True, False]:
        for days in [5, 20, 35]:
            for amount in [5000, 30000, 100000]:
                result = can_refund(admin, owner, days, amount)
                print(f"{str(admin):^6} {str(owner):^6} {days:^10} {amount:^10} {str(result):^6}")

진리표로 누락 케이스 발견

PYTHON📋 코드 (27줄)
# 진리표의 모든 행이 의도한 결과인지 확인
# 누락된 케이스가 보이면 코드에 버그 있음

def grade(score, attendance):
    """학점 부여 — 진리표로 누락 분석"""
    if score >= 90 and attendance >= 80:
        return 'A'
    if score >= 80 and attendance >= 70:
        return 'B'
    if score >= 70:
        return 'C'
    return 'F'


# 진리표 — 점수와 출석률 모두 등급화
import itertools

print(f"{'score':^7} {'attend':^7} {'grade':^6}")
for score in [95, 85, 75, 65]:
    for attend in [85, 75, 65]:
        g = grade(score, attend)
        print(f"{score:^7} {attend:^7} {g:^6}")

# 발견:
# - score=95 attend=65 → 'C' (A 못 받음, 출석 부족 — 의도? 버그?)
# - score=75 attend=65 → 'C' (출석 무관 — 의도된 동작)
# 진리표를 보면서 "이 조합은 맞나?" 검토

JavaScript — 객체 매핑으로 진리표 표현

JAVASCRIPT📋 코드 (15줄)
// 복잡한 if 대신 진리표를 객체로
const ROLE_PERMISSIONS = {
  // [admin][read][write][delete]
  'admin': { read: true,  write: true,  delete: true },
  'editor': { read: true,  write: true,  delete: false },
  'viewer': { read: true,  write: false, delete: false },
  'guest':  { read: false, write: false, delete: false },
};

function canPerform(role, action) {
  return ROLE_PERMISSIONS[role]?.[action] ?? false;
}

console.log(canPerform('editor', 'write'));  // true
console.log(canPerform('viewer', 'delete')); // false

다음 챕터

CH.11 "드모르간 법칙" — 복잡한 부정 조건을 읽기 쉽게 변환.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 권한 체크 / 조건 분기 함수를
진리표로 분석해서 누락 케이스와
단순화 가능한 패턴을 찾아줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

한국 결제 / 인증 시스템 5개의
조건문 복잡도를 진리표 관점에서
비교하고 베스트 프랙티스를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드베이스의 모든 복잡한 if문(3+조건)을
진리표로 분석해서 룩업 테이블로
전환 가능한 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 TDD에서 진리표 기반
테스트 케이스 자동 생성 도구 사용 비율과
실효성을 솔직히 알려줘.

⭐ 이것만 기억하세요
진리표: if/else를 표로 정리하기 이 3가지만 확실히 잡으세요
1.진리표는 N개 변수의 모든 가능한 조합(2^N)을 표로 정리 — 누락 케이스 발견과 버그 차단의 표준 도구
2.복잡한 if문을 객체 매핑(룩업 테이블)으로 전환하면 진리표를 코드로 직접 표현 가능
3.다음 챕터 CH.11에서 드모르간 법칙 — 부정 조건의 수학적 변환


공유하기
진행도 10 / 15