안녕하세요. 테디호프입니다.
Swift로 코딩을 하다가 에러가 나면 가끔 내용 중에 NSString 어쩌고 NSInterger 등등 NS 접두어가 붙은 클래스들을 볼 수 있습니다. 그리고 애플 공식 홈페이지에서 문법을 찾고 근원을 찾아가다보면 NS로 붙은 Class들을 발견하곤 하는데요.
NS가 도대체 뭐길래 이렇게 자주 보게되는 것인지 궁금해서 찾아봤습니다.
NS?
NeXTSTEP 이라는 회사의 줄임말로 '스티브 잡스'가 1985년에 창립한 소프트웨어 회사입니다.
이 당시 운영체제인 NeXTSTEP에서 사용되던 객체지향 언어들을 사용했었는데요.
애플이 NeXTSTEP이라는 회사를 인수하게 되면서 당시 사용하던 프로그래밍 언어들은 MacOS의 Object-C와 Swift언어의 근간이 됩니다. 그래서 Swift에서 NS가 붙은 접두어에 대한 설명을 보면 Foundation(근간)이라는 말이 같이 따라붙죠.
그럼 근간이 되는게 더 좋은거 아닌가요? 라는 물음이 생길 수 있습니다.
사용하는 곳에 따라서 다를 것 같은데요.
이유는 NSString, String을 비교해보면 똑같이 문자열과 관련된 것들인데 특징과 표현이 조금씩 다릅니다.
NSString은 Class인데 String은 Structure로 다르므로 값을 처리하는 방식이 다를 것이고
String는 Swift에서 Native하게 사용하기 위해서 NSString을 참조하여서 만들어진 것입니다.
한편으로 String과 NSString은 interchangeable(상호 교환)이 가능한데,
Swift에서는 String을 Native하게 사용하니 더 편합니다.
(Object-C 언어에서는 NameSpace 때문에 NS 클래스를 사용한다고 하는데요. Object-C는 뭔지 모르므로 지금은 패스...!)
특징도 조금조금씩 다른데 String은 String?으로 표현해서 Swift 언어가 지원하는 옵셔널을 사용할 수 있는데
NSString은 옵셔널을 손 쉬운 방식으로 지원하지 않는다고 합니다.
그럼에도 NSString만 지원하는 특징들이 있어서 사용하는 것 같습니다.
간단요약
모든 NS 클래스를 알아본 것은 아니기 때문에 전체를 정리할 수 없지만 간단하게 개념을 정리해보면,
(1) NeXTSTEP 회사의 유산으로 NS가 붙은 클래스는 대부분 NeXTSTEP 운영체제에서 유래된 언어 형식이라 앞글자를 따와서 NS라 불리는 것이다.
(2) 문서를 보다가 어떤 개념이 Foundation으로 NSxxxxx 와 같은 것을 따른다는 말은 해당 개념이 NSxxxxx로 부터 파생되었다라고 생각하면 된다. 더 깊게 들어가서 NS를 알아보면 좋겠지만 갓 배우는 입장에서는 Swift에서 Native하게 지원하는 개념들을 이해하는 것이 활용성과 시간 절약과 정신건강에 좋다.
(3) NS라 정의된 것들이 에러를 발생 시킨다면 간단하게 '기본적인 시스템 정의가 올바르지 않습니다.' 정도로 이해하면 된다.
참고한글
테디호프 드림




덧글