4. 연산자 우선순위와 산술 연산

프로그램에서 여러 개의 복합적인 연산자가 하나의 수식(표현식) 안에 혼재되어 있을 경우, 파이썬은 내부적으로 정해진 강력한 연산자 우선순위(Operator Precedence) 규칙에 따라 순차적으로 값을 평가합니다.

원하는 가장 정확한 계산 결과를 도출하기 위해서는 이 우선순위를 인지하거나 괄호 () 를 적극적으로 활용해야 합니다.

4.1 연산자 우선순위 표

파이썬이 수식을 평가하는 순위는 아래와 같으며, 위로 갈수록 가장 먼저 실행(최우선 순위)됩니다.

순위 구분 연산자 기호 형태 설명
0 그룹핑 ( ) 괄호 연산 (가장 강력한 최우선 순위)
1 함수 호출 f(args) 함수나 메서드 실행
2 참조 (슬라이싱) x[start:end] 시퀀스의 부분 범위 읽기
3 참조 (인덱싱) x[index] 단일 원소 참조
4 속성 참조 x.attribute 점(.)을 이용한 내부 속성 접근
5 산술 (제곱) ** 거듭제곱 계산
6 비트 연산 ~x 비트 반전 (NOT)
7 부호 (단항) +x, -x 양수와 음수 부호 지정
8 산술 (곱/나눔) *, /, //, % 곱셈, 나눗셈, 몫, 나머지
9 산술 (합/차) +, - 덧셈, 뺄셈
10 비트 이동 <<, >> 좌우 시프트(Shift) 연산
11 비트 연산 & 비트 AND
12 비트 연산 ^ 비트 XOR
13 비트 연산 | 비트 OR
14 비교 연산 in, is, <, ==, != 크기/동등성/포함 여부/메모리 식별
15 논리 연산 not x 논리형 부정
16 논리 연산 and 논리형 곱
17 논리 연산 or 논리형 합 (가장 낮은 우선순위)

[!TIP] 표현식이란? 연산자와 리터럴(데이터)이 결합된 하나의 구문을 뜻합니다. 파이썬에서는 문자열에서 문자를 꺼내는 인덱싱([])이나, 점(.)을 찍는 행위조차 내부적으로는 스페셜 메서드(__getitem__, __getattribute__ 등)를 호출하는 일종의 연산자로 취급받습니다.


4.2 산술 연산 (Arithmetic)

수학 연산과 완전히 동일하게 작동하지만, 프로그래밍 편의를 위해 operator 내장 모듈 함수들과 기능이 일대일로 매칭되어 있습니다. 람다(Lambda)나 함수형 프로그래밍(Functional Programming)을 작성할 때 연산자 기호 대신 모듈 함수를 넘길 수 있어 유용합니다.

이항 연산 메서드 매핑

  • 덧셈 (+): operator.add(a, b)
  • 뺄셈 (-): operator.sub(a, b)
  • 곱셈 (*): operator.mul(a, b)

나눗셈의 세분화 처리

파이썬의 나눗셈 기호는 연산 목적에 따라 엄격히 나뉘어집니다.

  1. 파이선 나눗셈 (/ 또는 operator.truediv())
    어떤 수를 나누든 항상 결과가 무한 소수를 지원하는 실수(float)로 타입 캐스팅되어 반환됩니다.
    print(10 / 2) # "5.0"
    
  2. 몫 연산 ( // 또는 operator.floordiv() )
    정수 나눗셈 시, 실수로 도출되는 소수점 아래 꼬리를 완전히 잘라버리고 오로지 정수 몫만을 얻어냅니다.
    print(10 // 3)   # "3" 
    print(10.6 // 3) # "3.0" (숫자 형태 자체는 따라가되 소수점 이하는 절삭)
    
서브목차