티스토리 뷰

제2외국어

NSString 비교 메소드

thingsu 2017. 7. 11. 23:00

Objective-C로 프로그래밍을 시작하는 분들은 많지 않을 겁니다. 대부분 C나 java, 비교적 최근에 시작하신 분들은 javascript나 python 등으로 먼저 입문하셨을겁니다. Objective-C는 다른 언어들과 차이가 많은 편인데 그 중 쉽게 보이는 하나는 switch 문에 NSString 타입의 비교를 할 수 없습니다. 오로지 정수형 데이터만 비교 가능하기 때문에 아스키코드로 사용되는 char 타입까지만 switch문에서 비교가 가능하고 그 외의 비교가 불가능합니다.


이에 대한 해결책은 


1. NSArray에서 index로 구분

2. NSDictionary에서 key로 구분

3. typedef에서 enum으로 구분

4. if문에서 String 비교 메소드로 구분


하는 방법들이 있습니다. 1~3번의 방법들은 이미 존재하는 NSString 타입의 변수를 또 다른 타입에 집어넣는 방법이니 생략하고, 4번을 중점적으로 설명하겠습니다.


두 NSString 타입을 비교하는 메소드는 [isEqual]과 [isEqualToString]이 있습니다.

[isEqual]은 NSObject의 메소드로 비교하려는 객체의 타입까지 비교(NSString 타입인지까지 확인)합니다. 그래서 서로 다른 객체(NSString 타입이 아닌 객체)와 비교를 하면 NO를 return하죠. 


[isEqualToString]은 NSString의 메소드로 NSString 타입인 두 객체를 비교하는 메소드입니다. 그렇기에 애플은 NSString의 비교가 필요할 땐 [isEqualToString]의 사용을 권장합니다. 더 엄격한 메소드이기 때문에 안전하고 빠르기 때문이죠.


실제로 [isEqual]과 [isEqualToString]의 속도 차이는 크지 않습니다. (https://www.bignerdranch.com/blog/isequal-vs-isequaltostring/)


하지만 두 NSString 타입을 비교할때 [isEqual]을 사용하기보다는 [isEqualToString]의 사용을 권장합니다. 아규먼트의 타입 무결성이 보장되기 때문이죠. (비교 대상이 NSString 타입이 아닌 다른 타입으로 왔을 때 컴파일 에러가 발생해서 사전에 체크가 가능합니다)

'제2외국어' 카테고리의 다른 글

C- Swift - Java 헷갈리는 데이터타입 정리  (0) 2020.11.27
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday