✅ Flag 변수의 활용
Flag 변수란 프로그램의 흐름을 제어하거나 상태를 나타내기 위해 사용하는 boolean 변수입니다.
주로 특정 조건의 충족 여부나 이벤트 발생 여부를 나타내는 데 쓰입니다.
주요 활용 예시
- 상태 표시:
isLoggedIn
,isLoading
등으로 현재 상태를 명확히 표현합니다. - 조건 제어: 반복문이나 조건문에서 특정 조건에 따라 로직을 분기하거나 제어합니다.
- 오류 처리: 오류 발생 여부를 플래그로 표시하여 추가적인 처리를 가능하게 합니다.
- 상태 변경:
isFirstRun
과 같이 특정 동작의 완료 여부를 나타내어 이후 동작에 영향을 줍니다.
사용 시 주의사항
- 명확한 이름 부여: 플래그가 어떤 상태를 나타내는지 직관적으로 알 수 있도록 이름을 지정해야 합니다.
- 남용 방지: 과도하게 사용하면 코드가 복잡해질 수 있으므로, 꼭 필요한 경우에만 사용해야 합니다.
- 유효성 관리: 초기값과 사용 범위를 명확히 정의하여 예기치 않은 오류를 방지해야 합니다.
🧩 파이썬의 Case 문 (match-case)
파이썬 3.10부터 도입된 match-case
문법으로, 다른 언어의 switch-case
와 유사한 기능을 수행합니다.
기본 구조
match 변수:
case 값1:
# 값1에 해당하는 실행문
case 값2:
# 값2에 해당하는 실행문
case _:
# 그 외의 경우 (와일드카드, default 역할)
특징
|
연산자를 사용하여 여러 값을 한 번에 매칭할 수 있습니다.- 리스트, 튜플 등 다양한 자료구조의 패턴 매칭을 지원합니다.
if
를 추가하여 조건부 매칭(case ... if ...
)이 가능합니다.
🏗️ 구조적 패턴 매칭 (Structural Pattern Matching)
단순 값 비교를 넘어, 데이터의 구조(튜플, 리스트, 객체 등)를 기반으로 패턴을 정의하고 분기 처리하는 문법입니다.
- case 문에서 언패킹과 변수 바인딩을 직접 할 수 있습니다.
- 복잡한
if-elif-else
구조를 대체하여 가독성을 향상시킵니다.
예시
shape = ("rectangle", 10, 20)
match shape:
case ("rectangle", width, height):
area = width * height
case ("circle", radius):
area = 3.14 * radius * radius
case _:
area = None
⚡️ 다른 언어의 switch-case와의 차이
구분 | 전통적 switch-case (C, Java 등) | 파이썬 match-case (3.10 이상) |
---|---|---|
매칭 대상 | 정수, 문자, 문자열 등 단순 값 | 값, 리스트, 튜플, 객체 등 복합 자료구조 |
패턴 매칭 | 값의 동등성만 비교 | 구조, 값, 타입, 언패킹, 조건(가드) 등 다양한 패턴 지원 |
break 필요 여부 | 각 case마다 break 필요 |
break 불필요 (첫 번째 일치 case만 실행) |
기본 케이스 | default 키워드 사용 |
_ (언더바) 사용 |
OR 조건 | 일부 언어만 지원 | | 연산자로 지원 |
복합 자료구조 | 지원 안 함 | 튜플, 리스트, 데이터클래스 등 직접 매칭 지원 |
조건부 분기 | case 내부에서 if 문 사용 |
case x if ... 형태로 case 자체에 조건 추가 가능 |
🦭 Walrus Operator (:=
)
바다코끼리 연산자(Walrus operator)는 :=
기호로, 변수에 값을 할당함과 동시에 그 값을 표현식 내에서 사용할 수 있게 해주는 대입 표현식입니다. 파이썬 3.8부터 도입되었습니다.
특징
- 할당과 반환을 동시에 수행 (예:
if (n := len(a)) > 10:
) - 기존에 여러 줄로 작성해야 했던 코드를 한 줄로 줄여 코드를 더 간결하고 직관적으로 작성하게 합니다.
- 반복문, 조건문, 리스트 컴프리헨션 등 다양한 곳에서 활용 가능합니다.
- 문법적 모호성을 피하기 위해 괄호를 사용해 명확하게 구분하는 것을 권장합니다.
예시
# 할당과 동시에 조건 검사
if (n := len(a)) > 5:
print(f"List is too long ({n} elements)")
# while 루프에서 읽기와 처리 동시 수행
while (chunk := file.read(256)) != '':
process(chunk)
# 리스트 컴프리헨션 내에서 값 할당 및 필터링
[clean_name.title() for name in names \
if (clean_name := normalize(name)) in allowed_names]
장점
- 중복 계산을 줄여 성능을 최적화합니다.
- 코드의 가독성과 간결성을 향상시킵니다.
- 변수의 스코프(유효 범위)를 좁혀 불필요한 변수 사용을 최소화합니다.