◎위챗 : speedseoul
몇 해 전 iOS앱개발을 시작하면서부터 궁금했던 NSString/ NSLog / NS블라블라 의 정체를 우연히
Objective C 입문서에서 발견해서 그 내용을 옮겨본다.
이전에 이야기했듯이 오브젝티브씨는 아주 약간 특별한 양념을 친 C와 같기 때문에 원한다면 NSLog대신 printf를 그냥 쓸 수도 있다. 그러나 시간과 날짜가 함께 출력되는 기능이나 새 라인 문자를 자동으로 넣어주는 등 부가적인 기능이 있으니 NSLog를 사용하기를 추천합니다.
NSLOG라는 함수 이름이 좀 낯설게 느껴질 수 있다. 함수 이름의 NS는 무슨 의미일까? 읽더보면 코코아의 모든 함수 상수 타입 이름에 NS가 앞에 붙는 것을 볼 수 있다. 이 접두사는 함수가 다른 툴킷에서 온 것이 아니라 코코아에서 왔다는 것을 알려준다.
이런 접두사는 같은식별자가 두 개의 다른 대상에 쓰일 때 결과적으로 큰 문제가 되는 이름 충돌 (name collisions) 사태를 막는데 도움이 된다. 만일 코코아가 Log()라는 이름의 함수를 가지고 있다면 이를 잘 알지 못하는 프로그래머가 어딘가에서 만든 Log라는 함수와 이름이 충돌할 수 있다. Log함수를 가지고 있는 프로그램이 코코아를 포함하면 XCode는 L:og가 여러번 정의되었다고 투덜댈 것이고 에러가 나타난다.
이제 접두사를 사용하는 것이 왜 좋은지 알게 되었다. 그런데 이번에는 다른 의문이 생길 것이다. 예를 들어, 왜 cocoa를 접두사로 쓰지 않고 NS를 사용했을까? NS접두사는 이 툴킷이 NextSTEP이라고 불리며 NeXT Software의 제품이었던 때로 거슬러 올라간다. NextSTEP을 위해 이미 작성된 코드와으이 호환을 유지하기 위해 애플은 NS 접두사를 계속 쓰고 있다.
중략
그래서 우리는 여기서 개발할때 접두사로 NS를 써서는 안된다.
출처: 오브젝티브 C 아이폰과 맥 OSX 개발을 위한 / 마크 달림플, 스콧 내스터 지음 / 이종웅, 박세현 옮김 / apress, bj퍼블릭 23페이지
자 요약들어간다.
NS는 NextSTEP 회사이름이고, 걍 스트링 인티저 로그 뭐시기 등등에 NEXTSTEP에서 뭐 추가해서 만든 NS블라블라 클래스가 있고 거기에 추가 기능들이 들어있으니 우리는 그걸 사용한다.
뭐 이런느낌으로 받아들여야 겠다.
걍 내가 인지하는 int string 등은 C의 함수형이라고 이해하고 넘어가야겠다.
이걸읽는 Swift개발자님들 짜증나시죠
그냥 String 을 쓸때 NSStirng으로 치환해서 사용해야한다.. 정도로 외워두고 갑시다.