swift를 공부해보겠습니다 - intro.

4 분 소요

intro - why swift

  • 이전에도 swift를 공부해보기 위해서, Xcode를 설치한 적이 있습니다만, 제 맥북이 매우 구형이어서 Xcode가 굴러가지 않더군요. 참고로 말하자면, 이전 맥북은 2015년형 맥북에어였으며 RAM은 고작 4기가였습니다. 굴러만 간다면 어떻게든 해보겠지만, 엑스코드 자체가 뚝뚝뚝 끊어지더군요.
  • 여기서 잠시, “왜 swift를 공부하려고 하느냐?”라는 질문을 하신다면, 흠. 글쎄요. 제가 당장 iOS를 개발할 것도 아니고 뭐 그렇기는 하니 결국은 그냥 재미가 목적이 되겠네요. 여기서 조금 더 나아가자면, 저는 Apple의 제품을 좋아합니다(네 흔히 말하는 앱들이라는 말입니다). 좋아하는 제품들에 대해서 조금 더 알아보고 싶다? 정도가 제 목적이 되겠네요.
  • 올해 초에 프로그래밍 과외를 홍보했을 때, 저는 “파이썬에 대한 수요가 존재할 것이다”라고 예측했지만 오히려 모바일 프로그래밍에 대한 수요가 꽤 많더군요. 저는 프로그래밍을 꽤 잘하는 편이니까 모바일 쪽도 해보면 어느 정도 할 수 있지 않을까? 라고 어느 정도 생각은 했지만, “해보고 그렇게 말하는 것과, 해보지 않고 그렇게 말하는 것” 사이에는 아주 큰 간극이 있습니다.
  • 그래서, 조금 더 공부해보려고 합니다.

what is swift?

  • swift는 2014년 Apple WWDC에서 발표된 프로그래밍 언어 입니다.
  • Apple이 기존에(Swift 이전에) 사용하고 있던 언어는 Objective-C 죠. Objective-C는 C에서 파생된 언어는 맞지만, 아예 다른 언어라고 보는 것이 좋습니다. Objective-C는 1980년대에 만들어진 언어이고, 이후 현대의 프로그래밍 언어들의 특성과 꽤 거리가 생김에 따라서, 현대적인 언어의 특성을 담아 새로운 언어의 필요성을 Apple이 느낀 것이 아닐까 싶습니다.
  • swift는 “재빠른”을 의미하는 영어단어이며, 동시에 “칼새”라는 조류를 의미하기도 하죠. 아무튼, 언어 자체가 “존나 빠름”을 의미하고 동시에 노렸다고 생각됩니다. 실제로 python과 속도를 비교하여 “우리가 200배 빨라”라는 식으로 비교하기도 했지만, 이런건 보통 자기들 언어는 튜닝하고 다른 언어는 튜닝하지 않고 비교하는 것이라서, 큰 의미가 있다고 보기 어렵습니다. 아무튼, “우리 존나 빨라”라는 것을 목적으로 하고 있다는 것이죠.
  • 모든 언어들에 비해서 빠르다기 보다는, 다른 언어들과의 비교 측면에서 우위가 있다고 보는 게 좋습니다. 세계적으로 점유율 측면에서 우위를 가지고 있는 언어들은 C#, java가 있습니다. C#은 마이크로소프트의 양아들이고, Java는 오라클의 양아들이죠(물론 Google의 Go도 있지만, 여기서는 제외하겠습니다). 아무튼 이 두 언어들은 모두 각자의 가상머신위에서(C#은 닷넷 프레임워크, Java는 JVM) 돌아가죠. 물론 가상머신의 존재로 인한 이점도 있지만, 이로 인해 최종적으로 도달할 수 있는 최대 속도에는 한계가 있습니다.
  • 반면, swift의 경우는 LLVM 컴파일러를 사용해서 C/C++ 등과 같이 최종 적으로 기계어로 변환됩니다. 즉, 가상머신 위에서 돌아가는 C#, java에 비해서 기계어로 변환되기 때문에 최종적인 속도에서 더 빠르다는 장점이 있는 것이죠. 그리고 여담이지만, LLVM 개발자와 swift 개발자는 동일한 인물인 크리스 래트너 라는 분이죠. 크리스 래트너가 LLVM을 개발했고 이후 애플에 스카웃되고 여기서 swift를 개발하게 된 것이죠.

swift 주요 특징

  • About swift에 따르면, swift는 일반적인 프로그래밍 에러를 피하기 위해, 다음과 같은 현대 프로그래밍 패턴을 채택했다고 합니다.
    • Variables are always initialized before use
      • 모든 변수는 사용하기 전에 초기화되어야 합니다. 흠, 사실 C의 경우는 변수들에 대해서 타입만 지정하고 값은 나중에 정의해줘도 문제가 없죠. 파이썬의 경우는 대부분 변수 선언과 정의가 동시에 일어나는 편이 많으니까, 이 특징을 따르고 있다고 볼 수 있겠네요.
      • C의 예를 들어보면, 변수를 선언하고, 그 값을 따로 정의해주지 않아도, 어떤 컴파일 에러도 발생하지 않습니다. 다만 런타임시에 에러가 발생할 가능성이 있죠. 가령, 변수에 어떤 값도 정의해주지 않았는데 그 값에 접근하여 사용한다면 문제가 발생할 수 있다는 이야기죠. 하지만, 컴파일 단에서 잡아주지 않기 때문에, 이 문제를 이후에 인지할 가능성이 높습니다. 다르게 표현한다면, 프로그래머에게 알아서 잘 관리하라고 하는, 전략을 취하고 있다고 할 수 있겠네요.
      • swift의 경우, 각 변수가 초기화되지 않으면, 컴파일 단에서 에러를 발생시킵니다. 엄밀히 따지면, 최종적으로만 초기화되면 되는 definitive initialization을 취하고 있는데, 이 부분은 대충 넘어갑니다. 자세하게 알고 싶으시면 이 Memory Safety: Ensuring Values are Defined Before Use 글을 읽어보시는 게 좋을 것 같네요.
    • Array indices are checked for out-of-bounds errors
      • 배열의 index는 범위를 벗어나지 않았는지 먼저, 체크되고
    • Integers are checked for overflow
      • 정수 값들은 overflow인지 체크되고
    • Memory is managed automatically
      • 메모리는 자동으로 관리된다. 뭐 이건 요즘 대부분의 언어들이 이렇게 하고 있는 것이죠.
    • Error handling allows controlled recovery from unexpected failures
      • 에러 핸들링 기법이 예상하지 못한 실패에 대한 복구를 관리한다, 정도로 해석할 수 있는데, 스위프트의 에러 핸들링 기법이 어떤 특이한 것이 있는지는 확인이 필요하겠네요.
    • Optionals ensure that nil values are handled explicitly
      • swift에는 Optionals 라고 하는 약간은 특이한 개념이 존재합니다. 앞서 말한것과 같이, swift는 모든 변수가 항상 초기화되는 것을 전제로 합니다. 하지만 필요에 따라서, 어떤 변수에게는 null과 같은 값을 주는게 필요할 때가 있죠. 엄밀히 따지면 swift에서는 이를 nil로 쓰고 있기는 합니다만. 아무튼, 필요에 따라서, 어떤 변수에 대해서 nil 값을 주고 싶다면 Optional을 사용하여 변수의 타입을 선언해야만, 초기값을 설정하지 않아도 코드를 돌릴 수 있습니다. 만약 그렇지 않다면, compile 시에 에러가 발생합니다.
      • 코드를 간단하게 var str1:String = nil 이렇게 작성한다면, 에러가 발생합니다. 앞서 말한 것과 같이, 모든 변수는 기본적으로 nil이 아닌 값으로 초기화되어야 하는데, 지금 코드에서는 초기화되지 않은 것이니까요.
      • 하지만, 코드를 이렇게 쓴다면, var str1:String? = nil 에러가 발생하지 않습니다. 해당 변수를 Optionals 로 선언해줬기 때문이죠.

What is Xcode?

  • 제가 주로 쓰는 IDE(통합 개발 에디터)는 VScode입니다만, iOS를 포함하여 모든 애플의 소프트웨어에 관여해 있는 IDE는 이 Xcode라는 놈입니다. vscode나 다른 IDE를 쓰고 싶다면 써도 되지만, 그래도 Xcode를 설치하기는 해야 하죠. 다른 프로그램들을 이용해서 iOS 앱을 만들 수도 있지만, 기본적인 성능 측면에서 Xcode를 뛰어넘는 것을 어렵다고 알려져 있습니다. 사실 생각해보면 당연한 것이죠. Xcode는 애플이 관리하며 이제 20년이 다 되어가는 IDE니까요. “애플에서 만든, 애플 제품을 만들기 위한 개발 에디터”입니다.
  • 다만, 용량이 매우 크고 무겁습니다. 만약 본인의 맥북의 성능이 형편없다면 iOS 앱을 개발할 수 없다고, 말씀드릴 수 있겠네요.

무엇으로 공부할 것인가?

wrap-up

  • 일단, 오늘은 여기까지만 정리하도록 하겠습니다. 다음부터는 언어를 배워보면서 조금씩 정리해볼게요.

댓글남기기