🔥 연산자 우선순위와 결합 방향

395자
6분

프로그래밍에서 연산자를 사용할 때, 연산자의 우선순위(Precedence)와 결합 방향(Associativity)을 이해하는 것이 정말 중요하답니다. 우선순위는 어떤 연산자가 다른 연산자보다 먼저 적용되는지를 결정하는 반면, 결합 방향은 동일한 우선순위를 가진 연산자들이 어떻게 그룹화되는지를 정의한답니다.

연산자 우선순위

연산자 우선순위는 일부 연산자에게 다른 연산자보다 높은 우선순위를 부여하며, 이러한 연산자는 먼저 적용되지요. 예를 들어, 다음 표현식이 17과 같은 이유를 연산자 우선순위로 설명할 수 있어요.

2 + 3 % 4 * 5
// 결과는 17
swift

왼쪽에서 오른쪽으로 엄격하게 읽는다면, 다음과 같이 표현식이 계산될 것으로 예상할 수 있겠죠?

  • 2 + 3 = 5
  • 5 % 4 = 1
  • 1 * 5 = 5

하지만 실제 정답은 5가 아닌 17이랍니다. 높은 우선순위의 연산자는 낮은 우선순위의 연산자보다 먼저 평가되기 때문이에요. Swift에서는 C와 마찬가지로 나머지 연산자(%)와 곱셈 연산자(*)가 덧셈 연산자(+)보다 높은 우선순위를 가지고 있어요. 결과적으로 덧셈이 고려되기 전에 나머지 연산과 곱셈이 모두 평가되는 거죠.

연산자 결합 방향

나머지 연산과 곱셈은 서로 동일한 우선순위를 가지고 있어요. 정확한 평가 순서를 파악하려면 연산자들의 결합 방향도 고려해야 한답니다. 나머지 연산과 곱셈은 모두 왼쪽의 표현식과 결합해요. 이를 표현식의 해당 부분 주위에 암시적 괄호를 추가하는 것으로 생각할 수 있는데, 왼쪽부터 시작된답니다.

(3 % 4)3이므로, 이는 다음과 같아요:

2 + 3 * 5
swift

(3 * 5)15이므로, 최종적으로 다음과 같이 계산되지요:

2 + 15
// 최종 결과는 17
swift

이러한 계산 과정을 통해 최종 답인 17을 얻을 수 있게 되는 거예요.

예제

다음은 연산자 우선순위와 결합 방향을 보여주는 몇 가지 예제 코드입니다:

let result1 = 2 + 3 * 4 // result1은 14
// 곱셈이 덧셈보다 높은 우선순위를 가짐
 
let result2 = (2 + 3) * 4 // result2는 20
// 괄호로 덧셈을 먼저 수행하도록 지정
 
let result3 = 2 * 3 % 4 // result3은 2
// 곱셈과 나머지 연산은 동일한 우선순위를 가지며,
// 왼쪽에서 오른쪽으로 결합함
 
let result4 = 2 * (3 % 4) // result4는 2
// 괄호로 나머지 연산을 먼저 수행하도록 지정
swift

위의 예제들은 연산자 우선순위와 결합 방향이 Swift 표현식 평가에 어떤 영향을 미치는지 잘 보여주고 있죠? 복잡한 표현식을 작성할 때는 이러한 규칙을 명심하는 것이 정말 중요해요.

Swift 표준 라이브러리에서 제공하는 연산자에 대한 자세한 정보와 연산자 우선순위 그룹 및 결합 방향 설정의 전체 목록은 Operator Declarations 문서를 참조하시면 돼요.

연산자 우선순위와 결합 방향에 대해 이해가 되셨나요? 복잡해 보일 수 있지만 코딩할 때 꼭 알아두어야 할 중요한 개념이랍니다. 연산자를 사용할 때마다 이 규칙들을 떠올려 보세요. 여러분의 코드가 의도한 대로 잘 동작할 수 있도록 도와줄 거예요!