본문 바로가기

SWIFT 공식문서 문법 알아보기/01.The Basics

Swift 공식문서 해설 The Basics - Type Aliases, Booleans, Tuples (1-8)

타입 알리아스 (Type Aliases)

타입 알리아스는 존재하는 타입을 대체하는 이름을 대체 가능한 이름으로 정의합니다. typealias라는 키워드로 타입을 정의합니다. 

타입 알리아스는 외부 소스로부터 특정 크기의 작업을 할 때와 같이 존재하는 타입을 문맥적으로 더 적합한 이름으로서 알아내기 원할 때 유용합니다.

 

typealias AudioSample = UInt16

 

타입 알리아스를 한 번 정의하면 알리아스를 사용하여 어디에서나 원래의 이름을 사용할 수 있습니다. 

 

var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound is now 0

 

여기에서 AudioSample은 알리아스로 UInt16으로 정의됐습니다. 알리아스 때문에 AudioSample.min을 부르는 것은 실제로는 UInt16.min을 부른 것이고 maxAmplitudeFound 변수 값 0의 초기화 값을 제공합니다.

Booleans

스위프트는 Bool이라고 불리는 기본 Boolean 타입을 가지고 있습니다. Boolean값은 참 혹은 거짓으로만 나타내기 때문에 논리적인 값으로 불립니다. 스위프트는 2가지 참 혹은 거짓의 2가지 상수의 값을 제공합니다. 

 

let orangesAreOrange = true
let turnipsAreDelicious = false

 

orangesAreOrange와 turnipsAreDelicious는 Boolean 문자그대로의 값으로 초기화된 사실에 근거하여 Bool로 추론됩니다. 만약 Bool을 만들자마자 참 혹은 거짓으로 설정했다면 Int와 Double처럼 상수나 변수로 선언할 필요가 없습니다. 타입 추론 기능은 이미 알고 있는 타입의 다른 값의 상수나 변수를 초기화할 때 스위프트 코드를 간결하고 읽기 쉽게 만들도록 도와줍니다.  

 

 

Boolean 값은 특히 if 구문 같은 조건식 문장을 사용할 때 특히 유용합니다.

 

if turnipsAreDelicious {
print("Mmm, tasty turnips!")
} else {
print("Eww, turnips are horrible.")
}
// Prints "Eww, turnips are horrible."

 

if 문장같은 조건문은 Control Flow에서 자세히 다룹니다.

 

스위프트의 안정성은 non-Boolean값이 Bool로 대체되는 것은 막아줍니다. 아래 컴파일 타입 오류를 봐봅시다.

 

let i = 1
if i {
// this example will not compile, and will report an error
}

 

그러나 아래 예는 성공적으로 컴파일 됩니다. 

 

let i = 1
if i == 1 {
// this example will compile successfully
}

 

i == 1의 비교 결과는 Bool 타입이고 2번째 예는 타입 체크를 통과합니다. i == 1과 같은 비교는 Basic Operators에서 다룹니다.

스위프트에서 다른 타입 안정성 예와 마찬가지로 이러한 접근 방식은 우연한 오류를 피하고 코드에서의 코드의 특정한 부분에서 의도를 명확하게 합니다. 

Tuples

Tuples는 다수의 값을 하나의 compound value 값으로 그룹화합니다. tuple 안에서의 값은 어떤 타입이든 가능하며 서로가 같은 타입일 필요도 없습니다. 

 

아래의 예는 (404, "Not Found") HTTP의 상태를 코드로 묘사한 tuple 입니다. HTTP 상태 코드는 웹페이지를 요청할 때 웹서버에 의해서 반환되는 특별한 값입니다. 404 Not Found 상태 코드는 존재하지 않는 웹페이지를 요청한다면 반환되는 값입니다. 

 

let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")

 

(404, "Not Found") tuple 은 HTTP 상태코드를 2개의 나누어진 값으로 주기 위해 Int와 String을 함께 그룹화했습니다. 숫자와 문자열은 (Int, String) tuple 타입이라고 표현할 수 있습니다.

어떤 순열을 가진 타입으로부터도 tuple도 만들 수 있고 원하는 만큼 다양한 타입을 포함시킬 수도 있습니다. (Int, Int, Int), 혹은 (String, Bool) 게다가 당신이 원하는 어떤 순열도 모두 가능합니다. 

 

tuple의 내용을 별도의 상수나 변수로 분해할 수 있으며 그러고 나서 평소처럼 사용이 가능합니다. 

 

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// Prints "The status code is 404"
print("The status message is \(statusMessage)")
// Prints "The status message is Not Found"

 

만약 일부의 tuple의 값만 쓰고 싶다면 tuple을 분해할 때 무시할 부분의 tuple을 언더바(_)로 표시합니다.

 

let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// Prints "The status code is 404"

 

대안으로는 tuple에서 0으로 시작하는 index number 을 이용해 각각의 요소 값에 접근이 가능합니다. 

 

print("The status code is \(http404Error.0)")
// Prints "The status code is 404"
print("The status message is \(http404Error.1)")
// Prints "The status message is Not Found"

 

tuple을 정의 할 때 각각의 요소에 이름을 지을 수 있습니다. 

 

let http200Status = (statusCode: 200, description: "OK")

 

만약 tuple에서 각 요소의 이름이 있다면 요소의 이름을 해당 요소 값에 접근하기 위해 요소의 이름을 사용할 수 있습니다.

 

print("The status code is \(http200Status.statusCode)")
// Prints "The status code is 200"
print("The status message is \(http200Status.description)")
// Prints "The status message is OK"

 

tuple은 특히 함수의 반환 값으로 유용합니다. 웹페이지를 검색하는 함수는 웹페이지 검색의 성공과 실패를 표현하기 위한 tuple 타입으로 (Int, String) 받을 수 있습니다. 각각의 다른 타입의 2개의 뚜렷한 값을 tuple로 받음으로써 함수는 하나의 타입에 가진 하나의 값에 대한 결과만 받을 때보다 더욱 유용한 정보를 제공합니다.

더 자세한 정보는 Functions with Multiple Return Values를 참고하세요

NOTE

tuple은 관련된 값을 간단하게 그룹화하는데 유용합니다.  tuple은 복잡한 데이터 구조를 만드는 데는 적합하지 않습니다. 만약 더 복잡한 데이터 구조를 만들고 싶다면  tuple 보다는 class 혹은 structure로 만들어야 합니다. 

더 자세한 정보는 Structures and Classes를 보세요.