본문 바로가기

전공/swift

swift (3) - 연산자 Operators

1. Terminology (술어)
(1) 단항 연산자 (Unary operators) 
: 단일 항목에 동작함 
ex) 단항 접두사 연산자 -> !b, -a 
단항 접미사 연산자 -> a++, b!
 
(2) 이항 연산자 (Binary operators) 
: 2개의 항목에 동작함. 2개의 항목 사이에 위치해야 함 -> 위치가 고정!
ex) 2 + 3, 3 % 2 
 
(3) 삼항 연산자 (Ternary operators)
: 3개의 항목에 동작함. 삼항 조건 연산자 1개만 존재 
if- else 구문으로도 구현할 수 있음. 
ex)  a ? 50 : 20 -> a 가 true 이면 return 50, a가 false 이면 return 20 
(a가 바뀌는 게 아님 !! 값이 return 되는 것임에 주의) 
 
(예시)
let myAge = 50 
myAge > 30 ? print("true") : print("false")
// 50 이 출력, return  값을 변수에 할당하지 않음
 
let a = true
let b : Int = a ? 1 : 0
print(b) 
// 1이 출력, return 값을 b에 할당 후에 출력
 
let a = true
let b: Int 
if a {
      b = 1
} else {
      b = 0 
}
// 위의 예시를 if-else 로 구현.
 
 
 
 
 
2. Assignment Operator (대입 연산자) 
오른쪽의 값을 왼쪽에 넣어준다
 
(예시)
let b = 10
var a = 5
a = b
// a는 10의 값을 갖게 됨.
 
 
 
 
3. Arithmetic Operators (산술 연산자)

  • Addition(덧셈) +
  • Subtraction(뺄셈) - 
  • Multiplication(곱셈) *
  • Division(나눗셈) /
  • Remainder(나머지) %

 
(예시)
1 + 2   // 3
5 - 3    // 2
2 * 3    // 6
10.0 / 2.5   // 4
9 % 4    // 1
 
덧셈 연산자는 String 타입의 연결 또한 지원한다. 
(예시)
" hello, " + "alswn"   // hello, alswn 로 연결됨
 
 
 
 
 
4. 그 외 연산자 3개 
(1) 단항 뺄셈 연산자 (Unary Minus Operator)
숫자 값의 부호를 - 접미사를 사용하여 변경할 수 있다. 
단항 빼기 연산자는 공백 없이 작동하는 값 바로 앞에 붙인다. 
 
(예시) 
let three = 3
let minusThree = -three   // minusThree 에 -3 할당
let plusThree = -minusThree   // plusThree 에 3 할당, -(-3) 와 같은 것
 
(2) 단항 덧셈 연산자 (Unary Plus Operator) 
어떠한 변경 없이 그 값을 그대로 반환한다 -> 아무런 동작을 하지 않음...
 
(예시)
let minusSix= = -6
let alsoMinusSix = +minusSix   // alsoMinusSix 는 -6, +6으로 변경되지 않음에 주의!! 
 
 
(3) 복합 대입 연산자 (Compound Assignment Operators)
C처럼 대입(=)과 다른 연산자를 결합한 복합 대입 연산자가 존재한다. 
아래와 같이 긴 표현을 짧은 표현으로 대체할 수 있다. 
x = x + 2 -> x += 2 
x = x - 2 -> x -= 2 
 
(예시)
var a = 1
a += 2   
//  a = a + 2 와 같은 표현. a는 3의 값을 갖게 된다. 
 
 
 
 
5. 비교 연산자 (Comparison Operators) 
각 비교 연산자는 구문이 true 인지 false 인지 판단하여 Bool 타입의 값을 반환한다. 
 

  • 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)

비교 연산자는 if 구문에서 활용될 수 있다. 
 
(예시)
let name = "alswn"
if name == "alswn" {
        print("hello, alswn")
} else {
        print("you are not alswn")
}
// hello, alswn 를 출력한다.
 
 
 
 
 
6. 범위 연산자 (Range Operators)
(1) Closed Range Operator (닫힌 범위 연산자)
a...b -> a부터 b까지의 범위 실행 (a와 b를 포함함, [a, b])
 
(예시)
for index in 1...5 {
       print("\(index) hello")
}
// print 가 총 5번 반복된다 (1, 2, 3, 4, 5) 
 
(2) Half-Open Range Operator (반-열림 범위 연산자)
a..<b -> a부터 b-1까지의 범위 실행 (마지막 값은 포함되지 않지만 처음 값은 포함함, [a, b))
 
(예시)
let names = [ "a" , "b", "c", "d" ]
let count = 4
for i in 0..<count {
     print(\(names[i]))
}
// 0부터 시작하는 list index 값에 맞추어 출력 가능 
 
(3) One-Sided Ranges (단방향 범위)
한방향으로 계속되는 범위를 실행 (특정 시작점부터 끝까지, 처음부터 특점 지점까지)
 
(예시)
for name in names[2...] {
      print(name)
}
// c, d 출력. 2를 포함함.
 
for name in names[...2] {
      print(name)
}
// a, b, c 출력. 2를 포함함
 
for name in names[..<2] {
      print(name) 
}
// a, b 출력. 2를 포함하지 않음
 
let range = ...5 
range.contains(7)    // false
range.contains(2)    // true
range.contains(-1)   // true 
// ...5 -> (INF,5] 
 
 
 
 
 
7. Logical Operators (논리 연산자)
(1) 논리적 NOT 연산자 -> !
Bool 값을 true 에서 false로, false 에서 true 로 만든다.
접두사 연산자이며 동작할 값 바로 앞에 공백없이 위치한다. 
 
(예시)
let a = false
if !a {
   print("Yes")
}
// Yes 가 출력됨. !a는 true 의 값을 가짐.
 
(2) 논리적 AND 연산자 -> &&
두 값이 모두 true 여야 true 를 return
두 값 중 하나라도 false 면 결과는 false 가 나오기 때문에 첫번째 값이 false일 경우 두번째 값을 살펴보지 않고 false를 반환한다. (연산 생략 short-circuit evaluation
 
(예시)
let a = true
let b = false 
if a && b {
    print("yes")
} else {
    print("no")
}
// no 가 출력됨. a && b 는 false의 값을 return 함
 
 
(3) 논리적 OR 연산자 -> || 
두 값 중 하나라도 true 면 true를 return 
두 값 중 하나라도 true 면 결과는 true 이기 때문에 첫번째 값이 true일 경우 두번째 값을 살펴보지 않고 true 를 반환한다. (2번의 경우와 같이 연산 생략)
 
(예시)
let a = true
let b = false 
if a || b {
    print("yes")
} else {
    print("no")
}
// yes 가 출력됨. a || b 는 true의 값을 return 함
 
 
(4) 논리적 연산자 결합
여러개의 && 와 || 연산자를 사용하여 긴 복합 표현식을 생성했을 땐, 
왼쪽부터 두 개씩 차근차근 엮어나가며 판단해주면 된다. 
 
(예시) 
let a = true 
let b = false
let c = false
let d = true
if a && b || c || d {
     print("Yes")
}
// Yes 가 출력됨. 처음 2개의 표현식은 false 이지만, 마지막 || d 에서 d가 true 이므로 전체값이 true가 된다. 
 
 
(5) 명시적 소괄호 (Explicit Parentheses)
소괄호를 포함하는 것이 영향이 없을 때, 소괄호를 적절히 사용하는 것은 복합 표현식의 가독성을 높인다.
 
(예시) 
let a = true 
let b = false
let c = false
let d = true
if (a && b) || c || d {
     print("Yes")
}
// 4번의 예시와 결과는 바뀌지 않지만, 전체적인 코드의 의도가 명확해진다.