짧은 분기에는 `if...else` 한 줄짜리 조건식이 딱입니다

Tasker_Jang·2026년 4월 19일
post-thumbnail

🤔 이게 왜 문제인가

변수 하나를 조건에 따라 다르게 초기화하는 상황, 자주 있죠. "0이면 기본값, 아니면 그대로", "None이면 빈 리스트, 아니면 받은 값 그대로" 같은 아주 단순한 분기. 이걸 if/else 블록으로 4줄씩 쓰면 코드가 무거워지고, 진짜 로직이 공백에 묻힙니다. 반대로 and/or 트릭으로 한 줄에 욱여넣으면 falsy 값 때문에 미묘한 버그가 생기기 쉽고요.

파이썬은 이 사이를 메우는 조건식(conditional expression)을 제공합니다. a if 조건 else b 형태인데, 다른 언어의 삼항 연산자(조건 ? a : b)와 어순이 달라서 처음엔 어색하지만 익숙해지면 아주 편합니다.

💣 흔한 실수

# 단순 분기를 장황하게 풀어 쓰기
def get_display_name(user):
    if user.nickname:
        name = user.nickname
    else:
        name = "익명"
    return name


# 더 나쁜 경우: and/or 트릭
name = user.nickname and user.nickname or "익명"
# nickname이 빈 문자열("")이면? → "익명"으로 빠져서 의도대로 동작하는 듯 보이지만
# nickname이 0이나 False를 반환할 가능성이 있으면 버그 폭탄

첫 번째 예시는 틀린 건 아니지만 단순 대입 하나에 4줄을 쓰고 있어서 함수가 비대해집니다. 두 번째 예시는 한 줄이지만 and/or의 단락 평가에 의존해서 falsy 값이 끼면 오동작해요. 둘 다 아쉽습니다.

✅ 파이썬다운 방법

# 조건식 한 줄로 깔끔하게
def get_display_name(user):
    return user.nickname if user.nickname else "익명"


# 변수 초기화에도 자주 씀
timeout = custom_timeout if custom_timeout is not None else 30
status = "성인" if age >= 18 else "미성년자"


# 리스트 컴프리헨션 안에서도 유용
labels = [("짝수" if n % 2 == 0 else "홀수") for n in numbers]

어순이 "참일 때 값 → 조건 → 거짓일 때 값"이라는 게 포인트입니다. A if condition else B라고 읽히죠. 영어 문장처럼 "A를, 조건이 참이면, 아니면 B를"이라는 흐름이에요. 처음엔 낯설어도 한 번 익숙해지면 if/else 블록이 오히려 길게 느껴집니다.

다만 조건식을 중첩하거나(x if a else (y if b else z)), 한 줄이 너무 길어지는 순간 바로 후퇴하세요. 그때는 평범한 if 문이나 도우미 함수가 훨씬 읽기 좋습니다. 조건식은 "단순한 이항 분기"에서만 빛을 봅니다.

📎 기억할 것

  • 파이썬 조건식 문법은 값A if 조건 else 값B. 다른 언어의 삼항 연산자와 어순이 다릅니다.
  • 아주 단순한 이항 분기에서만 쓰세요. 조건식이 중첩되기 시작하면 if/else 블록으로 돌아가는 게 맞습니다.
  • and/or 트릭은 falsy 값(0, "", [], None) 때문에 버그를 만들기 쉬우니 조건식으로 대체하세요.
  • 리스트 컴프리헨션 안에서 요소를 조건부로 변환할 때 특히 빛납니다([x*2 if x > 0 else 0 for x in nums]).
  • 한 줄이 너무 길어진다 싶으면 그 순간이 도우미 함수로 빼야 할 신호입니다.

🛠 실무에서 어디 쓸까

API 응답 가공할 때 자주 쓰입니다. user["name"] if user.get("name") else "Guest"처럼 기본값 채우기, "ok" if response.status_code == 200 else "error"처럼 상태 플래그 만들기 같은 거요. 또 로깅 메시지를 상황에 따라 다르게 찍을 때 logger.info(f"처리 완료 ({'성공' if ok else '실패'})")식으로 쓰면 포매팅이 훨씬 간결해집니다. 데이터 정제 파이프라인에서도 df["category"] = df["score"].apply(lambda s: "높음" if s >= 80 else "낮음") 같은 패턴이 흔해요. 단, 분기가 3개 이상이 되는 순간엔 미련 없이 별도 함수로 빼는 게 정답입니다.

profile
ML Engineer 🧠 | AI 모델 개발과 최적화 경험을 기록하며 성장하는 개발자 🚀 The light that burns twice as bright burns half as long ✨

0개의 댓글