객체 비교
객체간의 비교 - 기본
==
기본적으로 객체를 비교할 때 값이 아닌 레퍼런스를 비교합니다. 따라서 a와 b는 같은 값을 가지고 있지만 서로 다른 것으로 나타납니다. a와 c는 같은 값을 참조하고 있으므로 같다고 간주합니다.
class Car : NSObject {
var horsePower : Int
var plate : String
init(power: Int, id: String) {
horsePower = power
plate = id
}
}
let a = Car(power: 200, id: "AX993JE")
let b = Car(power: 200, id: "AX993JE")
let c = a
print(a == b) // <----- false
print(c == a) // <----- true!
===
식별 연산자(identity operator)라 불리는 ===는 객체간 비교에서 == 처럼 레퍼런스를 비교합니다. ==와의 차이점은 식별연산자는 객체간의 비교만 가능하다는 것입니다. 만일 Int, String과 같은 literal변수를 비교하려고 하면 에러가 발생합니다.
class Car : NSObject {
var horsePower : Int
var plate : String
init(power: Int, id: String) {
horsePower = power
plate = id
}
}
let a = Car(power: 200, id: "AX993JE")
let b = Car(power: 200, id: "AX993JE")
let c = a
print(a === b) // <----- false
print(c === a) // <----- true!
let aa: Int = 9
let bb: Int = 9
print(aa == bb) // <---- true!
print(aa === bb) // <---- false
객체간 비교 - Equatable
Equatable Protocol을 이용하여 자신만의 비교 함수를 작성할 수 있습니다. 객체를 비교하는 연산자로는 == 만 사용할 수 있습니다. 다음과 같이 == 함수를 작성하여 객체 내의 값을 비교할 수 있습니다.
import UIKit
class Car : Equatable {
var horsePower : Int
var plate : String
init(power: Int, id: String) {
horsePower = power
plate = id
}
static func == (lhs: Car, rhs: Car) -> Bool {
return lhs.plate == rhs.plate
}
}
let a = Car(power: 200, id: "AX993JE")
let b = Car(power: 147, id: "AX993JE")
print(a == b) // <---- true
- 참고: medium
'iOS > 학습정리' 카테고리의 다른 글
iOS) 오토 레이아웃과 오토 리사이징 (0) | 2021.01.15 |
---|---|
iOS) Core Data - 다른 저장소와의 비교 (0) | 2021.01.12 |
iOS) UIViewController (0) | 2020.12.19 |
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (3) (0) | 2020.09.14 |
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (1) (0) | 2020.09.14 |