๐ ํค์๋ ์ ๋ฆฌ
- prefix : ์ ์ ์ฐ์ฐ์
- postfix : ํ์ ์ฐ์ฐ์
- infix : ์ค์ ์ฐ์ฐ์
- operator : ์ฐ์ฐ์
- associativity : ์ฐ์ฐ์ ๊ฒฐํฉ๋ฐฉํฅ
- precedence : ์ฐ์ ์์
1๏ธโฃ ์ ์ ์ฐ์ฐ์ ์ ์์ ๊ตฌํ
** ๋ฅผ ์ ์ ์ฐ์ฐ์๋ก ์ฌ์ฉํด๋ณด์
prefix operator **
prefix func ** (value: Int) -> Int {
return value * value
}
let minusFive: Int = -5
let sqrtMinusFive: Int = **minusFive
print(sqrtMinusFive)
// 25
! (๋๋ํ) ๋ฅผ ๋ฌธ์์ด์๋ ์ฌ์ฉํด๋ณด์
prefix func ! (value: String) -> Bool {
return value.isEmpty
}
var stringValue: String = "yejin"
var isEmptyString: Bool = !stringValue
print(isEmptyString) // false
stringValue = ""
isEmptyString = !stringValue
print(isEmptyString) // true
2๏ธโฃ ํ์ ์ฐ์ฐ์ ์ ์์ ๊ตฌํ
** ์ ํ์ ์ฐ์ฐ์๋ก ์ฌ์ฉํด๋ณด์
postfix operator **
postfix func ** (value: Int) -> Int {
return value + 10
}
let five: Int = 5
let fivePlusTen: Int = five**
print(fivePlusTen)
// 15
โฐ ํ์ ์ฐ์ฐ์์ ์ ์ ์ฐ์ฐ์ ๋์ ์ฌ์ฉํด๋ณด๊ธฐ
๐ซ ํ๋์ ํผ์ฐ์ฐ์์ ์ ์ ์ฐ์ฐ๊ณผ ํ์ ์ฐ์ฐ์ ํ ์ค์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํ์ ์ฐ์ฐ์ ๋จผ์ ์ํํ๋ค!
prefix operator **
postfix operator **
prefix func ** (value: Int) -> Int {
return value * value
}
postfix func ** (value: Int) -> Int {
return value + 10
}
let five: Int = 5
let sqrtFivePlusTen: Int = **five**
print(sqrtFivePlusTen)
// (10+5)*(10+5) == 225
3๏ธโฃ ์ค์ ์ฐ์ฐ์ ์ ์์ ๊ตฌํ
์ค์ ์ฐ์ฐ์๋ ์ฐ์ ์์ ๊ทธ๋ฃน์ ๋ช ์ํด ์ค ์ ์๋ค.
์ฐ์ ์์ ๊ทธ๋ฃน ์ ์ ๋ฐฉ๋ฒ
precedencegroup ์ฐ์ ์์ ๊ทธ๋ฃน ์ด๋ฆ {
higherThan: ๋ ๋ฎ์ ์ฐ์ ์์ ๊ทธ๋ฃน ์ด๋ฆ
lowerThan: ๋ ๋์ ์ฐ์ ์์ ๊ทธ๋ฃน ์ด๋ฆ
associativity: ๊ฒฐํฉ๋ฐฉํฅ(left/right/none)
assignment: ํ ๋น๋ฐฉํฅ ์ฌ์ฉ(true/false)
}
- associativity : ๊ฒฐํฉ๋ฐฉํฅ์ ๋ช ์ํด ์ค ์ ์๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก none!
- assignment : ์ต์
๋ ์ฒด์ด๋๊ณผ ๊ด๋ จ๋ ์ฌํญ
- true: ํด๋น ์ฐ์ ์์ ๊ทธ๋ฃน์ ํด๋นํ๋ ์ฐ์ฐ์๋ ์ต์ ๋ ์ฒด์ด๋์ ํ ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ ๋น ์ฐ์ฐ์์ ๋์ผํ ๊ฒฐํฉ๋ฐฉํฅ ๊ท์น์ ์ฌ์ฉํ๋ค. ์ฆ, ์ค์ํํธ์ ํ ๋น ์ฐ์ฐ์๋ ์ค๋ฅธ์ชฝ ๊ฒฐํฉ์ ์ฌ์ฉํ๋ฏ๋ก assignment๋ฅผ true๋ก ์ค์ ํ๋ฉด ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ๋ ์ฒด์ด๋์ ํ ๋ ์ค๋ฅธ์ชฝ๋ถํฐ ์ฒด์ด๋์ด ์์๋๋ค๋ ๋ป
- false ํน์ ๋ฐ๋ก ์ค์ ์ด ์์ ๊ฒฝ์ฐ : ํด๋น ์ฐ์ ์์ ๊ทธ๋ฃน์ ํด๋นํ๋ ์ฐ์ฐ์๋ ํ ๋น์ ํ์ง ์๋ ์ฐ์ฐ์์ ๊ฐ์ ์ต์ ๋ ์ฒด์ด๋ ๊ท์น์ ๋ฐ๋ฅธ๋ค. ์ฆ, ์ฐ์ฐ์์ ์ต์ ๋ ์ฒด์ด๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์๋ค๋ฉด ์ผ์ชฝ๋ถํฐ ์ต์ ๋ ์ฒด์ด๋์ ํ๊ฒ ๋๋ค.
๐ซ ๋ง์ฝ, ์ค์ ์ฐ์ฐ์๋ฅผ ์ ์ํ ๋ ์ฐ์ ์์ ๊ทธ๋ฃน์ ๋ช ์ํด์ฃผ์ง ์๋๋ค๋ฉด ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ DefaultPrecedence๊ทธ๋ฃน์ ์ฐ์ ์์ ๊ทธ๋ฃน์ผ๋ก ๊ฐ๊ฒ๋๋ค.
**์ ์ค์ ์ฐ์ฐ์๋ก ์ฌ์ฉํด๋ณด์. ์ฐ์ฐ์ ์ด๋ฆ์ **์ด๊ณ , MultiplicationPrecedence ์ฐ์ฐ์ ์ฐ์ ์์ ๊ทธ๋ฃน์ ์ํ๊ฒ๋๋ค.
// String ํ์
์ contains(_:) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Foundation ํ๋ ์์ํฌ๋ฅผ ์ํฌํธ
import Foundation
infix operator ** : MultiplicationPrecedence
func ** (lhs: String, rhs: String) -> Bool {
return lhs.contains(rhs)
}
let helloYejin: String = "hello yejin"
let yejin: String = "yejin"
let isContainsYejin: Bool = helloYejin ** yejin
print(isContainsYejin) // true
4๏ธโฃ ํด๋์ค ๋ฐ ๊ตฌ์กฐ์ฒด์ ๋น๊ต ์ฐ์ฐ์ ๊ตฌํ
class Car {
var modelYear: Int?
var modelName: String?
}
struct SmartPhone {
var company: String?
var model: String?
}
// Car ํด๋์ค์ ์ธ์คํด์ค ๋ผ๋ฆฌ == ์ฐ์ฐํ์ ๋ modelName์ด ๊ฐ๋ค๋ฉด true๋ฅผ ๋ฐํ
func == (lhs: Car, rhs: Car) -> Bool{
return lhs.modelName == rhs.modelName
}
// SmartPhone ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค ๋ผ๋ฆฌ == ์ฐ์ฐํ์ ๋ model์ด ๊ฐ๋ค๋ฉด true๋ฅผ ๋ฐํ
func == (lhs: SmartPhone, rhs: SmartPhone) -> Bool {
return lhs.model == rhs.model
}
let myCar = Car()
myCar.modelName = "S"
let yourCar = Car()
yourCar.modelName = "S"
var myPhone = SmartPhone()
myPhone.model = "SE"
var yourPhone = SmartPhone()
yourPhone.model = "6"
print(myCar == yourCar) // true
print(myPhone == yourPhone) // false
ํ์ ๋งค์๋๋ก ๊ตฌํ๋ ์ฌ์ฉ์ ์ ์ ๋น๊ต ์ฐ์ฐ์
class Car {
var modelYear: Int?
var modelName: String?
// Car ํด๋์ค์ ์ธ์คํด์ค ๋ผ๋ฆฌ == ์ฐ์ฐ ํ์ ๋ modelName์ด ๊ฐ๋ค๋ฉด true ๋ฐํ
static func == (lhs: Car, rhs: Car) -> Bool {
return lhs.modelName == rhs.modelName
}
}
struct SmartPhone {
var company: String?
var model: String?
static func == (lhs: SmartPhone, rhs: SmartPhone) -> Bool {
return lhs.model == rhs.model
}
}
Reference
Swift: ์ค์ํํธ ํ๋ก๊ทธ๋๋ฐ - ์ผ๊ณฐ
'Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ต์ ๋ : ์ต์ ๋ ์ถ์ถ (0) | 2022.03.17 |
---|---|
[Swift] ํจ์ : ์ ์ถ๋ ฅ ๋งค๊ฐ๋ณ์ ํ์ฉ, ๋ฐ์ดํฐ ํ์ ์ผ๋ก์จ์ ํจ์, ์ค์ฒฉ ํจ์, @discardableResult (0) | 2022.03.16 |
[Swift] ์ด๊ฑฐํ ( ํญ๋ชฉ ์ํ, ์ํ ์ด๊ฑฐํ ) (0) | 2022.03.15 |
[Swift] ์ปฌ๋ ์ ํ : ๋ฐฐ์ด, ๋์ ๋๋ฆฌ, ์ธํธ (0) | 2022.03.15 |
[Swift] CustomStringConvertible > description (0) | 2022.03.14 |