Basic Operators

Groot·2022년 6월 7일
0

Swift Language Guide

목록 보기
2/24
post-thumbnail

Basic Operators

  • 연산자는 값을 확인, 변경 또는 결합하는 데 사용하는 특수 기호 또는 구입니다.
  • 더하기 연산자(+)는 let i = 1 + 2에서와 같이 두 개의 숫자를 더하고 논리 AND 연산자(&&)는 다음과 같이 두 개의 부울 값을 결합합니다.
  • swift에선 산술 연산자(+, -, *, /, % 등)는 값을 저장하는 유형의 허용된 값 범위보다 크거나 작아지는 숫자로 작업할 때 예기치 않은 결과를 방지하기 위해 값 오버플로를 감지하고 허용하지 않습니다.
  • 오버플로 연산자에 설명된 대로 Swift의 오버플로 연산자를 사용하여 값 오버플로 동작을 선택할 수 있습니다.
  • Swift는 또한 값의 범위 표현으로 ..<b 및 ...b와 같은 범위 연산자를 제공합니다.
  • 이 장에선 고급 연산자에 대한 설명은 하지 않습니다.

📌 Terminology

  • 연산자는 단항, 이항 또는 삼항 연산자로 구성됩니다.
    • 단항 연산자는 단일 대상(예: -a)에서 작동합니다. 단항 접두사 연산자는 대상 바로 앞에 나타나고(예: !b) 단항 접미사 연산자는 뒤에 나타납니다.(예: c!).
    • 이진 연산자는 두 개의 대상(예: 2 + 3)에서 작동하며 두 대상 사이에 나타나기 때문에 중위 연산자입니다.
    • 삼항 연산자는 세 가지 대상에서 작동합니다. C와 마찬가지로 Swift는 삼항 연산자인 삼항 조건부 연산자(a ? b : c)만 있습니다.(a가 true이면 b를 반환 false이면 c를 반환)
  • 연산자가 영향을 미치는 값은 피연산자입니다. 1 + 2에서 + 기호는 중위 연산자이고 두 개의 피연산자는 값 1과 2입니다.

📌 Assignment Operator

  • 할당 연산자(a = b)는 a 값을 b 값으로 초기화하거나 업데이트합니다.
    let b = 10
    var a = 5
    a = b
    // a is now equal to 10
    
  • 여러 값을 가진 튜플인 경우 해당 투플은 한 번에 여러 상수 또는 변수로 초기화될 수 있습니다.
    let (x, y) = (1, 2)
    // x is equal to 1, and y is equal to 2
    
  • C와 Objective-C의 대입 연산자와 달리, Swift의 대입 연산자는 값을 반환하지 않습니다.
    if x = y {
        // This isn't valid, because x = y doesn't return a value.
    }
    
  • 이 기능은 equals 연산자(==)를 의도했지만, 사용자의 실수로 할당 연산자(=)가 사용되는걸 방지합니다.

📌 Arithmetic Operators

  • Swift는 모든 숫자 유형에 대해 4가지 표준 산술 연산자를 지원합니다.
    • Addition (+)

    • Subtraction (-)

    • Multiplication (*)

    • Division (/)

      1 + 2       // equals 3
      5 - 3       // equals 2
      2 * 3       // equals 6
      10.0 / 2.5  // equals 4.0
      
  • C 및 Objective-C의 산술 연산자와 달리 Swift 산술 연산자는 기본적으로 값이 오버플로되는 것을 허용하지 않습니다. 하지만, Swift의 오버플로 연산자(예: &+ b)를 사용하여 값 오버플로 동작을 선택할 수 있습니다.
  • 더하기 연산자는 문자열 연결에도 지원됩니다.
    "hello, " + "world"  // equals "hello, world"
    

📍 Remainder Operator

  • 나머지 연산자(a % b)는 내부에 들어갈 b의 배수를 계산하고 남은 값(나머지라고 함)을 반환합니다.
  • 나머지 연산자가 작동하는 방식은 다음과 같습니다. 9 % 4를 계산하려면 먼저 9 안에 몇 개의 4가 들어갈 것인지 계산해야 합니다.
  • 9 안에 4를 두 개 넣을 수 있고 나머지는 1입니다

📍 Unary Minus Operator

  • 숫자 값의 부호는 단항 빼기 연산자로 알려진 접두사 -를 사용하여 지정할 수 있습니다.
    let three = 3
    let minusThree = -three       // minusThree equals -3
    let plusThree = -minusThree   // plusThree equals 3, or "minus minus three"
    

📌 Compound Assignment Operators

  • C와 마찬가지로 Swift는 할당(=)연산자와 다른 연산을 결합한 복합 할당 연산자를 제공합니다.
    var a = 1
    a += 2
    // a is now equal to 3
    
  • a += 2라는 표현은 a = a + 2의 줄임말입니다.

    복합 할당 연산자는 값을 반환하지 않습니다. 예를 들어 let b = a += 2라고 쓸 수 없습니다.

  • Swift 표준 라이브러리에서 제공하는 연산자에 대한 정보는 연산자 선언을 참조하십시오.

📌 Comparison Operators

  • Swift는 다음 비교 연산자를 지원합니다.

    Equal to (a == b)
    Not equal to (a != b)
    Greater than (a > b)
    Less than (a < b)
    Greater than or equal to (a >= b)
    Less than or equal to (a <= b)

    또한, Swift는 두 개의 객체 참조가 모두 동일한 객체 인스턴스를 참조하는지 여부를 테스트하는 데 사용하는 두 개의 Identity Operators(=== 및 !==)를 제공합니다. 자세한 내용은 Identity Operators를 참조하세요.

  • 각 비교 연산자는 문이 참인지 여부를 나타내는 Bool 값을 반환합니다.
    1 == 1   // true because 1 is equal to 1
    2 != 1   // true because 2 isn't equal to 1
    2 > 1    // true because 2 is greater than 1
    1 < 2    // true because 1 is less than 2
    1 >= 1   // true because 1 is greater than or equal to 1
    2 <= 1   // false because 2 isn't less than or equal to 1
    
  • 두 개의 튜플이 동일한 유형과 동일한 수의 값을 갖는 경우 비교할 수 있습니다.
  • 튜플은 비교에서 같지 않은 두 값을 찾을 때까지 한 번에 한 값씩 왼쪽에서 오른쪽으로 비교됩니다. 이 두 값이 비교되고 해당 비교 결과에 따라 튜플 비교의 전체 결과가 결정됩니다. 모든 요소가 동일하면 튜플 자체도 동일합니다.
    (1, "zebra") < (2, "apple")   // true because 1 is less than 2; "zebra" and "apple" aren't compared
    (3, "apple") < (3, "bird")    // true because 3 is equal to 3, and "apple" is less than "bird"
    (4, "dog") == (4, "dog")      // true because 4 is equal to 4, and "dog" is
    
  • 튜플은 해당 튜플의 각 값에 연산자를 적용할 수 있는 경우에만 주어진 연산자와 비교할 수 있습니다.
    ("blue", -1) < ("purple", 1)        // OK, evaluates to true
    ("blue", false) < ("purple", true)  // Error because < can't compare Boolean values
    
  • 두번째 튜플은 Bool타입 값을 포함하고 있기 때문에, < 연산자의 비교가 불가능합니다.

    Swift 표준 라이브러리에는 요소가 7개 미만인 튜플에 대한 튜플 비교 연산자가 포함되어 있습니다. 7개 이상의 요소가 있는 튜플을 비교하려면 비교 연산자를 직접 구현해야 합니다.


📌 Ternary Conditional Operator

  • 삼항 조건부 연산자는 질문 형식을 취하는 세 부분으로 된 특수 연산자입니다. question ? answer1 : answer2
  • 질문이 true이면 answer1 값을 반환합니다. 그렇지 않으면 answer2 값을 반환합니다.
  • 아래의 코드와 같은 의미입니다.
    if question {
        answer1
    } else {
        answer2
    }
    
  • 삼항 조건 연산자는 두 표현식 중 고려해야 할 표현식을 결정하기 위한 효율적인 약식을 제공합니다.
  • 삼항 조건부 연산자는 주의해서 사용하십시오. 그 간결함은 과도하게 사용하면 읽기 어려운 코드로 이어질 수 있습니다.
  • 삼항 조건 연산자의 여러 인스턴스를 하나의 복합 문으로 결합하지 마십시오.

📌 Nil-Coalescing Operator

  • nil-coalescing 연산자(a ?? b)는 값이 포함된 경우 optional a를 unwraps하고, a가 nil이면 기본값 b를 반환합니다.
  • nil-coalescing 연산자는 아래 코드의 줄임말입니다.
    a != nil ? a! : b
    

📌 Range Operators

  • Swift에는 값의 범위를 표현하기 위한 여러 범위 연산자가 포함되어 있습니다.

Closed Range Operator

  • 폐쇄 범위 연산자(a...b)는 b에서 실행되는 범위를 정의하고 값과 b를 포함합니다.
  • 폐쇄 범위 연산자는 for-in 루프와 같이 모든 값을 사용하려는 범위를 반복할 때 유용합니다.
    for index in 1...5 {
        print("\\(index) times 5 is \\(index * 5)")
    }
    // 1 times 5 is 5
    // 2 times 5 is 10
    // 3 times 5 is 15
    // 4 times 5 is 20
    // 5 times 5 is 25
    

Half-Open Range Operator

  • 반개방 범위 연산자(a..<b)는 b에서 b까지의 범위를 정의하지만 b는 포함하지 않습니다.
  • 첫 번째 값은 포함하지만 최종 값은 포함하지 않기 때문에 반개방이라고 합니다.
  • 반개방 범위는 배열과 같은 0부터 시작하는 목록으로 작업할 때 특히 유용합니다.
    let names = ["Anna", "Alex", "Brian", "Jack"]
    let count = names.count
    for i in 0..<count {
        print("Person \\(i + 1) is called \\(names[i])")
    }
    // Person 1 is called Anna
    // Person 2 is called Alex
    // Person 3 is called Brian
    // Person 4 is called Jack
    

One-Sided Ranges

  • 닫힌 범위 연산자는 한 방향으로 가능한 한 계속되는 범위에 대한 대체 형식을 가지고 있습니다.
    for name in names[2...] {
        print(name)
    }
    // Brian
    // Jack
    
    for name in names[...2] {
        print(name)
    }
    // Anna
    // Alex
    // Brian
    for name in names[..<2] {
        print(name)
    }
    // Anna
    // Alex
    

📌 Logical Operators

  • Swift는 C 기반 언어에서 볼 수 있는 세 가지 표준 논리 연산자를 지원합니다.
    • Logical NOT (!a)

    • Logical AND (a && b)

    • Logical OR (a || b)

      let allowedEntry = false
      if !allowedEntry {
          print("ACCESS DENIED")
      }
      // Prints "ACCESS DENIED"
      
  • 부울 상수 및 변수 이름을 신중하게 선택하면 코드를 읽기 쉽고 간결하게 유지하는 동시에 이중 부정 또는 혼란스러운 논리 문장을 피하는 데 도움이 될 수 있습니다.

Logical AND Operator

  • 논리 AND 연산자(a && b)는 전체 표현식도 참이 되려면 두 값이 모두 참이어야 하는 논리 표현식을 생성합니다.

Logical OR Operator

  • 논리 OR 연산자(a || b)는 두 개의 인접한 파이프 문자로 구성된 중위 연산자입니다

Combining Logical Operators

  • 여러 논리 연산자를 결합하여 더 긴 복합 표현식을 만들 수 있습니다.
    if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // Prints "Welcome!"
    

Explicit Parentheses

  • 복잡한 표현의 의도를 읽기 쉽게 하기 위해 엄격하게 필요하지 않은 경우 괄호를 포함하는 것이 때때로 유용합니다.
    if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // Prints "Welcome!"
    
  • 간결함보다 항상 우선시 되는 건 가독성입니다.
  • 의도를 명확히 하는 데 도움이 되는 괄호를 사용하십시오.
profile
I Am Groot

0개의 댓글