티스토리 뷰
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 |
---|