[Swift 문법] - 산술 연산자, 복합 연산자, 비교 연산자, 삼항 연산자, Switch, 범위 연산자

sun02·2021년 7월 8일
0

100 days of Swift 

목록 보기
2/40

1. Arithmetic operators (산술 연산자)

연산자를 이용해서 스위프트의 모든 기본 타입들을 결합할 수 있다.
연산자들은 + 와 – 같은 작은 수학적 기호이고 스위프트는 넓은 범위를 갖고 있다.

let firstScore = 12
let secondScore = 4
  • 여기 몇 가지 테스트 변수들이 있다.
let total = firstScore + secondScore
let difference = firstScore – secondScore
  • 우리는 더하기와 빼기를 + 와 – 로 할 수 있다.
let product = firstScore * secondScore
let divided = firstScore / secondScore
  • 그리고 우리는 곱하기와 나누기를 *와 /로 할 수 있다.

Swift에는 나눗셈 후에 나머지를 계산하는 특수 연산자 ‘%’가 있다.
이것은 한 숫자가 얼마나 들어갈 수 있는지 계산한 다음 나머지를 돌려준다.

let remainder = 13 % secondScore
  • 우리가 secondScore를 4로 설정했기에 13 % secondScore를 한다면 1을 받을 것이다. 왜냐하면 4는 13에 세 번 들어가고 1만큼 남기 때문이다

Swift에 전용 나머지 연산자(%)가 있는 이유는 무엇인가?

Swift는 나누기 이후 남은 것들을 계산할 수 있는 연산자를 갖고 있다.
이것은 ‘modulo’라고 불리기도 하지만 정말 구체적으로는 완전히 같지는 않다.

특별한 이벤트까지 465일이 남았다고 한다면, 이 값을 사용자에게 어떻게 유용한 방법으로 보여줄 것인가?

let weeks = 465 / 7
print(“There are \(weeks) weeks until the events.”)
  • 다음과 같이 나타낸다면, 이벤트까지 66주가 남았다고 출력할 것이지만 이것은 사실이 아니다.
  • 이처럼 두 개의 정수를 다루어야할 때 Swift는 둘을 나누고 정수로 만들기 위해 그 값을 0으로 반올림한다. 465를 7로 나눈 것은 정확히 66이 아니므로 사람들은 그 이벤트를 놓칠 수도 있다.
let weeks : Double = 465 / 7
print(“There are \(weeks) weeks until the event.”)
  • Swift에게 Int 가 아니라 Double 을 사용하게 하면 더 정확한 답을 얻을 것이다
  • 그러나 사실 유용하지는 않다 : 이벤트까지 66.428571429 주 가 남았다..

따라서 나머지 연산자가 필요하다.

let weeks = 465 / 7
let days = 465 % 7

print(“There are \(weeks) weeks and \(days) days until the event.”)
  • weeks는 465 / 7 를 0으로 반올림하여 66 주를 나타내고, days는 얼마나 남았는지 계산하지 위해 나머지 연산자를 사용한다.
let number = 465
let isMultiple = number.isMultiple(of:7)
  • 추가로, 만약 “이 숫자가 다른 숫자로 깔끔히 나누어 떨어지나요?” 를 알고 싶다면, Swift에는 다음과 같이 더 간단한 접근이 있다.

2. Operator overloading (연산자 오버로딩)

Swift는 연산자 오버로딩을 지원한다.
이것은 연산자가 하는 일이 네가 사용하는 값에 따라 달라진다는 멋진 표현이다.
예를 들어, + 는 다음과 같이 정수를 더한다

let meaningOfLife = 42
let doubleMeaning = 42 + 42
  • 예를 들어, + 는 다음과 같이 정수를 더한다
let fakers = “Fakers gonna”
let action = fakers + “fake”
  • 하지만 +는 다음과 같이 문자열도 합칠 수 있다.
let firstHalf = [“John”, “Paul”]
let secondHalf = “George”, “Ringo”]

let beatles = firstHalf + secondHalf
  • 또한 +를 이용해서 배열도 합칠 수 있다.

추가로, Swift는 타입-안전 언어이기에 타입들을 섞을 수 없다.
예를 들어, 정수와 문자열을 더할 수 없다.

3. Compund assignment operators (복합 할당 연산자)

Swift는 하나의 연산자와 할당을 결합하는 shorthand operator(속기 연산자)를 가지기 때문에 변수를 변경할 수 있다.
기존 연산자 -, +, *, / 처럼 보이지만 변수에 결과값을 할당하기 때문에 끝에 = 를 갖고 있다.

var score = 95
score -= 5
  • 만약 시험에서 95점을 받았지만 5점의 벌점을 받아야하는 경우 다음과 같이 적을 수 있다
var quote = “The rain in Spain falls mainly on the”
quote += “Spaniards”
  • 유사하게, +=를 이용해서 문자열에 문자열을 더할 수 있다.

4. Comparison operators (비교 연산자)

Swift는 비교를 수행하는 여러 연산자를 갖고 있고 수학에서와 유사하게 작동한다.

let firstScore = 6
let secondScore = 4
  • 다음과 같은 몇 개의 예시 변수로 시작해 보자

값이 같은지를 확인하는 두 가지 연산자가 있다 : ‘==’는 두 가지 값이 같은지 확인하고, ‘!=’는 두 가지 값이 같지 않은지 확인한다.

firstScore == secondScore
firstScore != secondScore
  • ‘==’는 두 가지 값이 같은지 확인하고
  • ‘!=’는 두 가지 값이 같지 않은지 확인한다.
firstScore < secondScore
firstScore >= secondScore
  • 값이 크거나 같은지, 작은지, 같은지를 비교하는 네 가지 연산자가 있다.
    이들은 수학에서와 똑같다
“Taylor” <= “Swift”
  • 문자열은 자연 알파벳 순서를 갖기 때문에 문자열에도 작동한다.

5. Conditions (조건)

몇 가지 연산자들을 알게 되었으므로 if문을 사용하여 조건을 작성할 수 있다.
Swift에 조건을 주고, 그 조건이 참이라면 해당 코드를 실행할 것이다.

이것을 시행하기 위해, print() 함수를 사용한다. 텍스트와 함께 실행하면 이 함수는 출력할 것이다.

let firstCard = 11
let secondCard = 10

if firstCard + secondCard == 21 {
  print(“Blackjack!”)
}
  • "Blackjack"을 얻기 위해 조건을 사용하여 확인할 것이다

괄호 안의 코드는 조건이 참일 때만 실행될 것이다.

if firstCard + secondCard == 21 {
print(“Blackjack!”)
} else {
print(“Regular cards”)
}
  • 만약 조건이 거짓일 때 실행한 대안 코드도 작성하고 싶다면, else 를 사용하라
if firstCard + secondCard == 2 {
    print(“Aces = lucky!”)
} else if firstCard + secondCare == 21 {
    print(“Blackjack!”)
} else {
    print(“Regular cards”)
}
  • 너는 else if 를 사용하여 조건을 묶을 수 있다

6. Combining conditions (조건 결합하기)

Swift는 조건들을 결합하는 두 가지 특별한 연산자를 갖고 있다.
&&(‘and’로 읽음)과 ||(‘or’로 읽음)이다.

let age1 = 12
let age2 = 21

if age1 > 18 && age2 > 18 {
    print(“Both are over 18”)
}
  • 다음과 같이 두 사람 다 특정 나이 값을 넘는지 확인할 수 있다.

print()는 둘 다 18살보다 많을 때만 행하질 것이다.
사실, Swift는 age2의 값을 확인도 하지 않을 것이다 왜냐하면 age1이 이미 거짓이기 때문이다.

&&의 대안은 ||이다.
이것은 둘 중에 하나만 테스트를 통과해도 참으로 평가한다.

If age1 > 18 || age2 > 18 {
   print(“At least one is over 18”)
}
  • 둘 중 한 명만 18살을 넘어도 메세지를 프린트 할 수 있다.

한 조건에서 && 와 || 를 한번 이상 사용할 수 있지만
너무 복잡하게 만들면 읽기 힘들어 지기에 좋지 않다.

7. The ternary operator (삼항 연산자)

Swift에서 삼항 연산자는 거의 사용되지 않는다.
이것은 한번에 세 가지 값을 다룰 때 사용되기 떄문에 삼항 연산자 이다.
삼항 연산자는 첫번째 값의 조건을 확인하고
만약 이것이 참이라면 두 번째 값을 반환하고
거짓이라면 세 번째 값을 반환한다.

삼항 연산자는 물음표와 콜론으로 나누어진 조건과 참 또는 거짓 블록이 하나로 합쳐진 것이고 읽기 꽤 어렵다.

let firstCard = 11
let secondCard = 10

print(firstCard == secondCard ? “Cards are the same” : “Cards are different”)
  • 두 카드가 같은지 확인하고 만약 같다면 “Cards are the same”을 출력하고
    아니라면 “Cards are different”를 출력한다.
if firstCard == secondCard {
   print(“Cards are the same”)
} else {
   print(“Cards are different”)
}
  • 동일한 코드를 다음과 같이 작성할 수도 있다.

8. Switch statements

만약 if 와 else if 를 사용하는 조건 여러 개를 가지고 있다면
switch 문으로 알려진 다른 구조를 사용하는 것이 더 명확하다.
이 접근 방식을 사용하면 너는 조건을 한 번 작성한 다음 가능한 모든 결과와 각각에 대해 어떤 일이 발생해야 하는지 나열한다.

let weather = “sunny”
  • 여기 문자열 sunny를 포함하는 날씨 상수가 있다.
Switch weather {
case “rain”:
    print(“Bring an umbrella”)
case “snow”:
    print(“Wrap up warm”)
case “sunny”
    print(“Wear sunscreen”)
default:
    print(“Enjoy your day!”)
}
  • 네 가지 다른 메세지 중 하나를 출력하기 위해 switch 블록을 사용할 수 있다.

Swift는 네가 가능한 모든 케이스를 포함하여 결과를 놓치는 일이 없도록 하기 위해서 마지막에 default를 요구한다.
만약 날씨가 비, 눈, 해 모두 아니라면 default 케이스가 실행될 것이다.

스위프트는 각 케이스 안의 코드만 실행한다.

Switch weather {
case “rain”:
    print(“Bring an umbrella”)
case “snow”:
    print(“Wrap up warm”)
case “sunny”:
    print(“Wear sunscreen”)
    fallthrough
default:
    print(“Enjoy your day!”)
}
  • 만약 다음 케이스로 계속 실행하길 원한다면 fallthrough 키워드를 사용하여라.

9. Range operators (범위 연산자)

Swift 는 범위를 표현하는 두 가지 방법을 제공한다.
‘..<’ 와 ‘…’ 연산자 이다.

  • ‘..<’는 마지막 값을 포함하지 않는 범위를 만들고
  • 닫힌 범위 연산자 ‘…’ 는 마지막 값을 포함하는 범위를 만든다.

예를 들어, 1..<5범위는 1,2,3,4를 포함하지만 1…5는 1,2,3,4,5를 포함한다.

범위는 Switch블럭에서 유용하다 왜냐하면 너는 각각의 케이스에 이것을 사용할 수 있기 때문이다.

let score = 85

switch score {
case 0..<50 :
    print(“You failed badly.”)
case 50..<85 :
    print(“You did OK.”)
default:
    print(“You did great!”)
}
  • 다음과 같이 점수에 따라 다른 메세지를 출력할 수 있다.

이전과 같이, default 케이스는 모든 가능한 값이 포함되는 것을 보장하기 위해 무조건 있어야한다.

출처

0개의 댓글