1.2.1 스위프트 언어에서 차용하고 있는 주요 기능들
스위프트는 기술적으로 새롭다고 할 수 있지만 다른 언어에서 채택된 개념들을 조합한 것이 많습니다. 스위프트를 만들면서 주변 언어로부터 차용한 10가지 개념과 특징들에 대해 InfoWorld.com 에서 이야기하고 있는 글을 인용하여 스위프트의 특성을 다른 언어들과 비교해 보겠습니다.
딕셔너리(해시 테이블) - 자바스크립트, 파이썬
대괄호 구문을 이용하여 값을 배열로 만들거나 문자열을 입력받는데 , 이것이 해시 테이블 역할을 합니다. 애플에서는 이것을 딕셔너리(Dictionaries)라고 부르며, 초기화할 수 있는 구문을 제공합니다.
var airports = [String : String?] ()
airports["ICN"] = "Inchon International Airport"
// If close "Inchon International Airport", then delete it"
airports["ICN"] = nil
// ICN has now benn removed from the dictionary
데이터 타입 추론 - 함수형 프로그래밍 언어
최근의 컴파일러들은 데이터로부터 스스로 형식을 추론할 수 있으므로 컴파일러가 알아서 변수에 데이터 형식을 지정할 수 있게 되었습니다. 이러한 움직임은 ML과 같은 함수형 언어로부터 시작되었으며, 이후 하스켈, 스칼라, 오파 등의 언어에도 등장했습니다. 데이터 타입은 강제하지만, 데이터 타입을 생략할 수 있는도록 스위프트 컴파일러도 발전하였습니다.
let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int
데이터 구조체 타입 선언 - C#과 자바
제네릭 타입은 '<'와 '>' 기호를 이용하여 데이터 구조체에 저장될 형식을 지정하곤 합니다. 이와 동일한 방법으로 데이터 구조체에 저장될 타입을 컴파일러에게 미리 알려줄 수 있게 되었습니다.
var namesOfIntegers = Dictionary<Int, String>()
// namesOfIntegers is an empty Dictionary<Int, String>
문자열 템플릿 - 콜드 퓨전, JSP, 파이썬 등
편의를 위해 많은 프로그래밍 도구들이 변수값을 문자열 템플릿에 삽입하는 기능을 제공합니다. 스위프트는 역슬래시와 함께 소괄호를 작성하고, 그 안에 평가할 식이나 변수를 넣어 출력해주는 깔끔한 텔플릿 시스템을 제공합니다. 불과 세 번의 부가적인 키 입력으로 문자열 템플릿을 제공하는 이 방식은 아마 같은 기능을 수행하기 위한 키 입력 중에서는 가장 적은 수일 것입니다.
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples"
let fruitSummary = "I have \(apples + oranges) piece of fruit."
선택 사항인 세미콜론 - 자바스크립트와 파이썬
세미콜론(;)은 한 행의 구문이 끝났음을 알려주는 간편한 방법이지만, 어떤 이유에서인지 세미콜론을 입력하기 싫어하는 개발자의 수가 점점 늘어나는 것 같습니다. 스위프트에서 세미콜론은 라인 끝에 붙일 수 있는 선택 사항입니다. 여러 구문을 한 라인으로 묶어야 할 때에는 세미콜론이 필요하지만, 각 구문을 개별 라인으로 작성할 때는 애써 힘들여가며 세미콜론 기호를 입력할 필요는 없습니다.
프로토콜(인터페이스) - 자바와 C#
자바와 C#에서 정교한 객체지향 클래스 구조체를 만드는 프로그래머는 가장 먼저 기본 인터페이스부터 설계를 시작하는 경우가 많습니다. 인터페이스는 클래스가 정의에 부합하기 위해 제공해야 하는 모든 함수에 대한 구조를 정의하는 기본 클래스입니다. 스위프트에서는 클래스 모음의 인터페이스에 대해 '프로토콜(Protocol)'이라는 용어를 사용합니다.
protocol ExampleProtocol {
var simpleDescription : String { get }
mutating func adjust()
}
튜플(Tuple) - 리스프와 파이썬
함수나 메소드에서 가끔 두 개 이상의 값을 반환해야 할 때가 있습니다. 리스프와 같은 초기 언어는 모든 요소를 튜플 목록으로 간주했는데, 파이썬 같은 근래의 언어는 메소드에서 반환되는 N개의 값과 여기에 바인딩되는 N개의 변수를 맞추기 위한 명시적인 구문을 제공합니다. 스위프트도 이 방식을 따라 튜플을 지원합니다.
func getGasPrices() -> (Doble, Double, Double) {
return (3.59, 3.69, 3.79)
}
getGasPrices()
자동 참조(가비지 콜렉터 비슷) - 자바, C#, 오브젝티브-C
가비지 콜렉터는 메모리를 탐색하면서 더는 사용되지 않는 메모리 영역을 회수하는 자동 루틴으로, 앞 글자를 따서 GC라고 불리기도 합니다. 자바와 C# 프로그래머들은 가비지 콜렉터를 무척 좋아하지만, 때로는 가비지 콜렉터 때문에 프로그램이 잠깐 멈추는 현상이 발생하기도 합니다. 가비지 콜렉터의 결과로 가용 메모리가 다시 늘어나는 장점이 있는 반면, 가비지 콜렉터를 실행하는 동안 프로세스는 원활한 진행을 방해 받는다는 단점도 있습니다.
스위프트는 자동 참조 카운트(.ARC - Auto Referencing Counter)를 사용하는데, 이는 오브젝티브-C 사용자들 사이에서 널리 사용된 것과 비슷한 솔루션입니다. 이 기능은 오브젝티브-C에서 물려받았다고 할 만한 기능입니다.
부호 있는 정수와 부호 없는 정수 - C#과 오브젝티브-C
좋은 시스템 프로그램이란 바이트 레벨에서 작동하는 프로그램을 의미하는 경우가 많습니다. 스위프트 역시 1, 2, 4, 8바이트의 부호 없는 정수와 부호 있는 정수를 제공합니다.
let pink : UInt32 = 0xCC6699
let redComponent = (pink & 0xFF0000) >> 16
// redComponent is 0xCC, or 204
let greenComponent = (pink & 0x00FF00) >> 8
// greenComponent is 0x66, or 102
let blueComponent = pink & 0x0000FF
// blueComponent is 0x99, or 153
클로저(Closure) - 리스프와 스킴에서 자바스크립트까지
자바스크립트 프로그래머는 소량의 코드를 묶어서 함수처럼 전달하는 클로저를 사용할 수 있습니다. 스위프트는 클로저를 제공할 뿐만 아니라 함수를 1급 객체로 간주, 인자값으로 함수 자체를 전달하는 기능을 제공합니다.
let numbers = [Int]()
numbers.map({
(number:Int) -> Int in
let result = 3 * number
return result
})
멀티 라인 쿼우팅(Multi-Line Quoting)
스위프트에서 4.0 이후, 파이썬과 같이 멀티 라인 쿼우팅 문법을 거의 그대로 도입하였습니다. 파이썬처럼 큰따옴표를 세 개 겹친 """로 문자열의 시작과 끝을 나타내는 방식으로 우리는 여러 줄의 문자열을 간편하게 입력할 수 있게 되었습니다. 이는 여러 줄의 문자열을 입력하기 위해 더이상 문자열 내부에 인위적인 줄바꿈 문자('\n')를 넣어주지 않아도 된다는 뜻이기도 합니다.
let query = """
SELET member_id, member_name, member_level, nick_name
FROM member
WHERE login_id = ? AND password = ?
"""
Last updated