Programming/Mac & iOS

[iOS] '=='과 'isEqual:'의 차이

MB Brad KWON 2016. 5. 18. 14:38

    포스팅을 시작하기에 앞서 'equlity'와 'identity'의 파이를 아는 것이 중요하다. 'equality'는 값의 동일함을 의미하고, 'identity'는 메모리의 주소가 일치함을 의미한다. 'isEqual:' 메소드는 Equlity와 연관이 있다. NSObject에서의 'isEqual:' 기본 구현은 메모리 주소 비교에 기반한다. 


    이외에 NSObject를 상속 받은 클래스들은 'isEqual:'을 구현할 때 아래의 사항을 따른다.


- 'isEqualTo___CLASSNAME___'이라는 이름의 메소드를 통해 값을 비교하도록 구현한다.. (Equality)

- 'isEqual:'를 오버라이딩하여 클래스와 객체의 비교한다. (Identity)

- 'hash'를 오버라이딩한다. hash는 해시 테이블 구조에서 테이블 주소로 사용되어 지며, 내부 자료나 상태에 의존적인 hash 값을 반환해야한다. Collection의 멤버들의 비교를 보다 빠르게 하기 위하여 사용한다.


    위에서 언급한 'equality'와 'identity'를 다시금 말하자면, 객체를 비교할 때 우리는 보통 2가지의 방법이 있다. '=='과 'isEqual:'이 있다. 2가지는 어떻게 객체를 비교하는가. 먼저 '=='은 객체의 주소 즉, 포인터에 저장되어 있는 주소를 비교하여 같은 객체인지를 확인한다. 같은 메모리 주소에 할당되어 있는지를 확인하는 것이다. 'isEqual:'은 각 객체 안에 존재하는 value를 확인한다. 



출처 : http://nshipster.com/equality/



'Programming > Mac & iOS' 카테고리의 다른 글

[iOS] What's new in iOS 10  (0) 2016.06.27
[iOS] Alcatraz : Xcode 패키지 매니저  (0) 2016.05.25
[iOS] CoreData: Concurrency & Performance  (0) 2016.05.16
[iOS] Initialization과 Literal  (0) 2016.05.16
[iOS] App Extensions in iOS  (0) 2016.04.30