0Pricing
Swift Academy · 강의

연산자 오버로딩과 우선순위 그룹

타입에 맞게 기본 제공 연산자를 오버로드하고, 표현식이 의도대로 해석되도록 precedence groups 를 정의합니다. 설계는 간결하고 예측 가능하게 유지합니다.

연산자 오버로딩과 우선순위 그룹은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 3개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

연산자를 사용자 지정하는 이유

Swift에서는 타입에 맞게 연산자를 오버로드하고 새로운 연산자를 만들 수 있습니다. 명확성을 우선하고 동작을 문서화하며, 예기치 않은 결과를 피하도록 우선순위를 신중하게 정의하십시오.

내장 연산자 오버로드

기존 연산자를 오버로드하려면 동일한 기호와 자신의 타입을 사용하는 독립 함수를 작성합니다. 의미가 예측 가능하도록 유지하십시오(예: +는 값을 더함).

struct Vector2D: CustomStringConvertible, Equatable {
    var x: Double
    var y: Double
    var description: String { "(\(x), \(y))" }
}
func + (lhs: Vector2D, rhs: Vector2D) -> Vector2D {
    Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
func == (lhs: Vector2D, rhs: Vector2D) -> Bool {
    lhs.x == rhs.x && lhs.y == rhs.y
}
let a = Vector2D(x: 1, y: 2)
let b = Vector2D(x: 3, y: 4)
let c = a + b
print(c)     // (4.0, 6.0)

사용자 지정 연산자와 우선순위

우선순위 그룹을 선언하고 연산자에 연결하십시오. 오른쪽 결합성을 사용하면 2 ** 3 ** 2가 2 ** (3 ** 2)로 구문 분석됩니다.

// Define power operator ** with right-associative precedence
precedencegroup PowerPrecedence {
    higherThan: MultiplicationPrecedence
    associativity: right
}
infix operator ** : PowerPrecedence

// Simple integer exponent (education-only; no overflow checks)
func ** (base: Int, exp: Int) -> Int {
    guard exp >= 0 else { return 0 }   // keep it simple for demo
    if exp == 0 { return 1 }
    var result = 1
    for _ in 0..<exp { result *= base }
    return result
}
print(2 ** 3)          // 8
print(2 ** 3 ** 2)     // 2 ** (3 ** 2) = 2 ** 9 = 512 (right-assoc)

접두사 및 접미사 연산자

접두사/접미사 연산자를 정의할 수 있습니다. 명확한 수학적 영역에서만 사용하고, 예상 밖의 의미는 피하십시오.

prefix operator √
prefix func √ (x: Double) -> Double { x.squareRoot() }

postfix operator !
postfix func ! (x: Bool) -> Bool { !x }  // purely demo; avoid confusing overrides

print(√9)     // 3.0
print(true!)  // false (demo only — don't ship this)

실제 우선순위 적용

기본 제공 연산자(예: MultiplicationPrecedence)를 기준으로 우선순위를 신중하게 정하십시오. 표현식의 가독성과 의도를 확인하려면 테스트하십시오.

// Demonstrate how precedence affects parsing
// Our PowerPrecedence is higher than Multiplication.
// So this parses as: 2 * (3 ** 2) = 18
let r1 = 2 * 3 ** 2
print(r1)

// Compare if we had lower precedence (hypothetical):
// Then it would parse as (2 * 3) ** 2 = 36

권장 사항

지침:

  • 비표준 동작에는 메서드를 우선 사용하고, 익숙한 수학 및 비트 연산에는 연산자를 사용하십시오.
  • 사용자의 기대에 맞추십시오(+는 더하고, *는 곱합니다).
  • 사용자 지정 연산자를 문서화하고 그 수를 적게 유지하십시오.
  • 모호한 구문 분석을 피하려면 우선순위와 결합성을 정의하십시오.

연산자를 올바르게 선언하기

빠른 확인: 우선순위 그룹과 함께 새 연산자를 추가하는 올바른 방법은 무엇입니까?

복습

복습: 의미가 명확할 때만 연산자를 오버로드하십시오. 구문 분석을 제어하려면 우선순위 그룹과 결합성을 정의하고, 명확성을 위해 표현식을 테스트하십시오.

자주 묻는 질문

“연산자 오버로딩과 우선순위 그룹” 강의는 무료인가요?

네 — “연산자 오버로딩과 우선순위 그룹” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

“연산자 오버로딩과 우선순위 그룹”에서 뭘 배우나요?

타입에 맞게 기본 제공 연산자를 오버로드하고, 표현식이 의도대로 해석되도록 precedence groups 를 정의합니다. 설계는 간결하고 예측 가능하게 유지합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 1번째 강의입니다.

“연산자 오버로딩과 우선순위 그룹” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 연산자 오버로딩과 우선순위 그룹
  2. 서브스크립트와 사용자 지정 인덱스 다시 보기
  3. Hashable/Equatable/Comparable 파생
← Swift Academy(으)로 돌아가기