The Basics
Swift는앱 개발을 위한 새로운 프로그래밍 언어이다. Swift의 상당 부분은 C 나 Objective-C 개발 경험이 있다면 익숙할 것이다.
Swift는 정수(Integer) 자료형을 위한 Int, 실수(floating-point) 자료형을 위한 Double 과 Float, 참/거짓(Boolean values) 자료형을 위한 Bool, 텍스트 데이터를 위한 String 등 C와 Objective-C에서 제공하는 자료형을 제공한다. 또한, Swift는 Array, Set 그리고 Dictionary 라는 3개의 주요 Collection 타입을 제공한다.
C 언어와 같이 Swift는 값을 이름을 정의하여 값을 저장하거나 참조할 수 있는 변수들을 제공한다. Swift는 또한 값을 변경할 수없는 상수(Constants) 역시 사용할 수 있다. Swift에서 정의하여 사용하는 상수(Constatns)는 C보다 더 강력하다. Swift에서 상수(Constants)를 통해 코드를 더 안전하고 명확하게 작성하기 위해서 사용된다.
또한 Swift는 Objective-C에서는 찾을 수 없는 tuples 데이터 타입을 제공한다. Tuple을을 활용해 값을 묶어서 생성하고 전달할 수 있으며, 하나의 합쳐진 값으로 함수로부터 다수의 값을 반환 받기 위해 사용할 수 있다.
Swift는 더하여 Optional Types도 제공한다. Optional types은 선언된 변수 또는 상수에 저장되어야 할 값이 존재하지 않는 상황을 다루기 위한 타입으로 변수에 값이 존재하는 경우 존재하는 값으로 변수 또는 상수를 다루고 그렇지 않은경우 값이 존재 하지 않다는 정보를 코드 작성자에게 제공한다. Optionals을 사용하는 것은 Objective-C 에서 포인터와 함께 nil 값을 사용하는것과 유사하다. 그러나 optionals는 특정 타입에 한정짓지 않고 Swift 내의 모든 타입에 적용하여 활용할 수 있다. 그렇기 때문에 optionals optionals는 objective-C 에서 포인터와 함께 사용되는 nil 보다 더 안전하고 더 많은 것을 표한 할 수 있을 뿐만아니라뿐만 아니라, Swift의 중요한 특징들의 핵심이기도 하다.
Swift는 코드 작성자가 사용하는 값의 타입을 더 분명하게 사용할 수 있도록 돕는 type-safe language이다. 코드의 일부가 String 을 요구할 때, type safety는 Int을 반환하거나, non-optional String을 반환해야하는 코드에 optional String을 반환하는 등의 실수를 막아준다.막아준다. Type Safety는 개발 과정에서 빠르게 에러를 인지하고 식별할 수 있도록 돕는다.
Constants and Variable
상수(Constants)와또는 welcomMessage같은 이름과 숫자 10 또는 문자열 “Hello”와 같은 특정 타입의 값과 연결하여 사용한다. 상수(Constants)로 사용된 값은 일단 한번 값을 저장하면 변경할 수 없으며, 변수(variable)는 이와 달리 값을 저장한 후에도 향후 필요에 따라서 값을 변경하여 저장할 수 있다.
Declaring Constants and Variables
상수(Constants)와 변수(variables)는 코드내에서 사용되기 전에 반드시 선언되어야 한다. 상수(constants)는 let 키워드를 사용하여 선언하며 변수(variables)는 var 키워드를 사용하여 선언한다. 아래의 예제는 유저가 만든 계정에 로그인 시도를 하는 횟수를 기록하기 위해 사용된 상수(constant)와 변수(variable)이다.
위의 간단한 예제는 다음과 같이 해석 할 수 있다.
“maximumNumberOfLoginAttempts라는 이름의 상수가 선언되었고, 이 상수에는 10이라는 숫자 값을 저장한다. 그리고 cuurentLoginAttempt라는 이름을의 변수가 선언되었고 이 변수는 숫자 0이라는 초기값을 가진다.”
이 예제에서 허용된 로그인 시도 횟수는 상수로 선언되었기때문에 이값은 변경되지 않는다. 현재 로그인 시도 횟수는 변수로 선언되었기때문에 이 값은 로그인 시도를 실패할때마다 저장된 값이 증가해야한다.
하나이상의 상수 또는 변수를 ‘,’ (comma)로 구분하여 한 줄의 코드로 선언 할 수 있다. 그예제는 아래와 같다.
Note - 코드에서 저장된 값이 변경되지 않을 계획이라면 let keyword를 사용해서 constant로 선언하고 변경될 수 있는 값을 저장하기 위해서는 variable로 사용하는 것이 좋다.
Type Annotations
상수(Constant) 또는 변수(variable)를을 선언할 때 Type annotation을 할 수 있다. Type annontation은 변수나 상수에 저장될 값이 어떤 형태의 데이터인지 명세하는 것으로 상수와 변수 이름뒤에 ‘ : ’ (colon)을을 쓴 후 ' '공백을 두고 사용하고자 하는 데이터 타입의 이름을 작성하는 방식으로 type annotation을 추가할 수 있다.
아래 코드는 welcomMessage라는 이름의 상수 값에는 String 타입의 값이 저장될 수 있음을 알리는 type annotation을 한 사례이다.
위 예제에서 사용된 ‘ : ’의 의미는 “ 의 타입…”이라는 의미로 이 코드는 아래와 같이 읽을 수 있다.
“String 타입의 welcomeMessage라는 이름을 가진 변수를 선언한다”
이 문장에서 “String 타입의” 라는 말의 의미는 “String 값을 저장할 수 있는” 이라는 의미이다. 저장될 수 있는 “어떤 것의 타입”이라는 의미라고 생각할 수 있다.
위에서 선언한 wecomeMessage 변수는 String 값이라면 어떤 것이든 아래와 같이 에러 없이 저장할 수 있다.
앞서 한 줄에 ‘, ’(comma)를 활용해 한 줄의 코드의 다수의 연관된 값을 선언하는 경우에도 하나의 type annotation으로 저장될 값의 형태를 함께 선언 할 수 있다.
Note - 학습 목적이 아닌 실제 개발 환경에서 type annotation을 사용해야하는 경우는 드물다. 상수나 변수를 선언 및 정의하는 지점에서 초기값을 제공한다면 Swift는 대부분의 경우 항상 상수와 변수에 저장될 데이터 타입을 Type Safety와 Type Inference가 보장되는 경우, 항상 추론한다.
위의 welcomemessage 상수 예제의 경우, 초기 값을 제공하지 않았기 때문에 초기값으로 추론할수 없으므로 해당 상수에 type annotaion으로 저장될 데이터의 타입을 작성 해준 것이다.
Naming Constants and Variables
상수(Constants)와 변수(variables)의의 이름은 유니코드 문자를 포함한 거의 대부분의 문자를 포함 수 있다.
상수(Constants)와 변수(variable) 이름은 공백 문자, 수학적 심볼, 화살표 , privagte-use Unicode, line- and box-drawing 문자들을 사용할 수 없으며, 이름 중간에는 숫자를 사용할 수 있지만 변수명을 숫자로 시작할 수 는 없다.
*private-use Unicode : Unicode에 공식적으로 특정 문자 사용을 선언하지 않은 영역으로 개인이 상호 간 약속된 조직, 집단, 개인과 별도의 문자를 정의하여 사용할 수 있음.
일단 특정 타입의 상수와 변수를 특정 이름으로 선언하면, 동일한 이름을 다시 선언하거나, 다른 타입을 저장하기 위한 변경을 할 수 없다. 그리고 Constant로 선언된 변수를 Variable로 , variable로 선언된 변수를 constatns로 사용할 수 없다.
Note - Swift에서 사용되는 키워드와 같은 이름으로 상수나 변수를 사용한다면 ‘ ` ‘ (backtick)을 keyword 앞뒤로 추가하여 변수 명으로 선언하여 사용할 수 있다. 그러나 다른 방법이 없는게 아니라면 키워드를 이름으로 사용하는 것은 피하는 것이 좋다.
선언된 상수에 저장된 값은 호환되는 다른 타입의 다른 값으로 변경할 수 있다. 예제는 friendlyWelcome에 저장된 값을 “Hello!” 에서 “Bonjour!”로 변경한 사례이다.
변수(variable)와는 다르게 상수(Constants)는 값을 저장한 후 변경할 수 없다. 값을 변경하기 위한 코드를 장성한다면 컴파일 단계에서 에러메세지를 받을 것이다.
댓글