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번의 예시와 결과는 바뀌지 않지만, 전체적인 코드의 의도가 명확해진다.
'전공 > swift' 카테고리의 다른 글
| swift(6) - Object 와 Class, Tuple (0) | 2024.06.07 |
|---|---|
| swift (5) - Function, Optional (0) | 2024.04.22 |
| swift (4) - String 과 Array, Control Flow (0) | 2024.04.22 |
| swift (2) - Constants 와 Variables, Type Safety (1) | 2024.04.20 |
| swift (1) - Macbook 사용법 및 기본 개념 (1) | 2024.04.12 |