[Swift] 스위프트의 역사와 언어적 특징

륜재·2023년 1월 31일
0
post-thumbnail

학기 중에 iOS 앱 개발에 관심을 갖게 되어, Swift를 가볍게 공부하였고 이후에 SwiftUI로 간단한 클론코딩을 진행해 보았다. 비전공자 개발자이다 보니 다양한 언어를 경험해 보지 않아서 처음 공부할 때 머리에 잘 들어오지 않았고, 깊이가 너무 얕다 보니 금방 잊어버린 느낌이 들었다. 그래서 오늘부터 Swift 문법을 공부하고 그 내용을 블로그에 정리하고자 한다.

1. 스위프트의 역사

기존의 iOS 앱개발자들은 Objective-C를 사용하여 앱을 개발하였다. Objective-C는 C언어를 기초로 하여, 스몰토크의 메시지 개념과 객체지향 개념을 반영한 객체지향형 C언어이다. C언어를 기반으로 하다보니, 다른 현대적 언어에 비해 어려워 처음 입문하는 개발자들에게 높은 진입장벽이 되었다. 그리하여 애플은 더 많은 개발자들이 참여할 수 있도록 상대적으로 쉽고 빠른 언어인 스위프트를 개발하여 2014 WWDC에서 발표하였다.

2015년 12월 스위프트를 오픈소스로 전환하여 공개해 다른 플랫폼에서도 자유롭게 스위프트를 사용할 수 있도록 하였고, 많은 개발자들이 스위프트 발전에 기여할 수 있도록 하였다. 글을 쓰는 현재 시점에서 스위프트는 5.7.3버전까지 배포되었다.

애플이 처음 스위프트를 개발할 때 스위프트의 언어적 특징으로 Safe, Modern, Powerful이라고 소개했고, 오픈소스로 전환되면서 특징을 Safe, Fast, Expressive로 변경했다. 이와 같은 스위프트의 언어적 특징에 대해 소개해보려 한다.

2. 스위프트의 언어적 특징

2-1. 안정성 (Safe)

스위프트는 Objective-C에 비해 쉽게 사용할 수 있는 언어를 표방하였기 때문에, 엄격한 문법을 통해 발생할 수 있는 실수를 방지하여 안정성을 높였다.

1) 스위프트는 데이터 타입 추론 기능에 의해 컴파일러가 알아서 변수와 상수의 타입을 결정하기 때문에 동적 바인딩 언어인 것처럼 보이지만, 정적 바인딩 언어이고 엄격하게 데이터 타입을 구분하여 안정성을 높였다.

2) ARC(Auto Referencing Counter)를 통해 자동으로 메모리를 관리하기 때문에 메모리 누수에 대해 안정성이 높다.

2-2. 신속성 (Fast)

스위프트는 C 언어를 기반으로한 Objective-C를 대체하려는 목적으로 만들어진 언어이다. 따라서 C 언어 수준과 동등한 수준의 컴파일 성능을 구현하기 위해 개발되었고, 파이썬과 같은 언어와 비교하였을 때에는 실행 속도가 빠르다.

2-3. 더 나은 표현성 (Expressive)

스위프트는 Objective-C 보다 읽고 쓰기 쉬운 문법을 구현하려 노력하였다. 따라서 현대적 프로그래밍 언어의 세련된 문법과 기능(옵셔널, 제네릭, 클로저, 튜플 등)을 다수 차용하여, 보기 좋고 쓰기 좋은 언어가 되기 위해 발전해 나가고 있다.

3. 스위프트의 프로그래밍 패러다임

스위프트는 여러 가지 프로그래밍 패러다임을 차용한 다중 패러다임 프로그래밍 언어이다. 명령형 프로그래밍 패러다임, 객체지향 프로그래밍 패러다임, 함수형 프로그래밍 패러다임, 프로토콜 지향 프로그래밍 패러다임을 차용했다. 이 프로그래밍 패러다임에 대해 가볍게 정리해보자.

3-1. 객체지향 프로그래밍 패러다임

객체지향 프로그래밍은 컴퓨터 프로그램을 객체의 모임으로 본다. 각각의 객체는 서로 메시지를 주고 받고 데이터를 처리할 수 있다. 객체지향 프로그래밍은 강한 응집력과 약한 결합력으로, 대규모 소프트웨어 개발에서 유지보수성이 좋아 많이 사용된다.

3-2. 함수형 프로그래밍 패러다임

함수형 프로그래밍 패러다임은 프로그램이 상태의 변화 없이 데이터 처리를 수학적 함수 계산으로 취급하고자 하는 패러다임이다.

명령형 함수를 이용하는 객체지향 프로그래밍은 절차지향 프로그래밍 패러다임이 포함되어, 함수 실행 시 함수가 전달 받은 전달인자 외에 포인터, 레퍼런스 값 등 객체의 상태 값 또는 메모리 참조 값 등이 변경될 수 있고 함수 내부의 처리에도 영향을 미친다.

함수형 프로그래밍은 순수하게 함수에 전달된 인자 값만 결과에 영향을 주기 때문에 상태 값을 갖지 않는다. 따라서 어떤 상황에서 프로그램을 실행하더라도 일정하게 같은 결과를 도출한다. 따라서 함수형 프로그래밍은 대규모 병렬처리가 쉽다.

함수형 프로그래밍에서는 함수를 일급 객체로 다루어, 전달인자로 전달할 수 있고, 스위프트에서도 함수를 일급객체로 취급한다. 근래에는 스위프트 뿐만 아니라 자바(자바8), C 언어(C# 3.0)에서도 객체지향 프로그래밍 패러다임을 기반으로 함수형 프로그래밍이 가능하도록 업데이트되고 있다.

3-3. 프로토콜 지향 프로그래밍 패러다임

스위프트는 객체지향 프로그래밍 언어이기도 하지만 프로토콜 지향 프로그래밍 언어(POL)이기도 하다. '프로토콜'은 스위프트에서 클래스 모음의 인터페이스에 사용하는 용어이다. 스위프트는 다중 상속을 지원하지 않지만, 프로토콜을 정의하고, 익스텐션을 클래스, 구조체, 프로토콜 등 대부분 객체에 적용할 수 있기 때문에, 값 타입을 더 효율적으로 사용하고 오류를 줄일 수 있다고 한다.

책의 내용을 기반으로 스위프트 언어의 역사와 언어의 특징에 대해 정리해 보았는데, 내용상으로만 보면 파이썬보다 성능이 뛰어나고, C 언어 보다 배우기 쉬운 막강한 언어인 것 같지만 비교적 짧은 역사와 어떤 한 플랫폼에서 개발한 언어이다 보니 완성도와 범용성이 그만큼 확보되지 않았다는 생각도 든다. 하지만 C 언어에 익숙하지 않은 나에게는 공부하는 데 재미가 나름 있는 언어인 것 같다.

참고자료

  1. 야곰, 스위프트 프로그래밍, 한빛미디어(2019), p.33-49
  2. 꼼꼼한 재은 씨의 Swift:문법편, 루비페이퍼(2017), p.1-25

0개의 댓글