[Swift] type safe, typealias, tuple

상 원·2022년 6월 29일
0

Swift

목록 보기
3/31
post-custom-banner

Swift is type safe language.

스위프트 공식 문서를 읽던 도중 이 문구를 발견했다.
예전에 수업 들을 때도 듣긴 했지만, 스위프트는 자료형에 굉장히 엄격한 언어임!
type safe 라는 것은 타입을 무조건 까다롭게 맞춰줘야 하는 것인데,
이 스위프트라는 언어는 타입에 엄청 예민해서 컴파일 할 때 자료형이 틀리면 오류를 뱉어버린다.

근데 모든 변수나 상수에 자료형을 명시해 줘야 하냐? 그건 또 아님.
변수나 상수를 선언할 때 자료형을 쓰지 않으면, 스위프트는 type inference(타입 추론)를 통해서 타입을 추정한다.
타입 추론은 컴파일러가 이 변수/상수에 대한 타입을 자동적으로 연역추론할 수 있게 해줌.

typealias

기존의 자료형을 내가 정한 별명으로 사용할 수 있게 해줌!

typealias AudioSample = UInt16

이런 식으로 UInt16 자료형을 AudioSample로 바꿔서 부를 수 있게 해준다.

자체적인 자료형을 만들 때 class를 사용하면, 이 클래스 이름도 typealias를 사용해 바꿔서 부를 수 있다.

Class Student{
	...
}
typealias Students = [Student]
var students: Students = []

학생 정보를 담고 있는 Student 클래스의 배열 Students를 만들 수 있음.
이다음에 students 변수를 선언해서 요 자료형을 Students로 설정할 수 있다.

그리고 좀 고급스럽게 사용하려면, 함수에도 typealias를 사용할 수 있는데,
클로저를 사용할 때 복잡한 걸 간단하게 만들 수도 있다.

func test(completeHandler: (Void) -> (Void) ){
	...
}

test라는 함수에 completeHandler라는 함수를 클로저 형태로 선언했다면,

typealias voidHandler = (Void) -> (Void)
func test(completeHandler: voidHandler){
	...
}

이런 식으로 고쳐서 쓸 수도 있다.

클로저는 좀 어려워서 다음에 함수하면서 다시 공부해 봐야겠다!

Tuples

튜플은 여러 개의 값들을 하나의 통합 값으로 만들 수 있는 것이다.
C에서는 보지 못했던 문법이라 생소하긴 한데 어렵진 않음.

인터넷이 오류났을 때 많이 보던 문구 404 HTTPS Error를 묶어보고 싶다면,
(404, "HTTPS Error") 이렇게 Int와 String을 묶어야 한다.
이걸 튜플은 하게 해줌!!

let https404Error = (404, "HTTPS Error")

이런 식으로 쓰면 https404Error를 쓰면 저 두가지 값들이 한번에 쓰여지는 것이다.

이렇게 만든 튜플을 어떻게 사용하냐구?

print("The status code is \(https404Error.0)")
//The status code is 404
print("The status message is \(https404Error.1)")
//The status message is HTTPS Error

이렇게 인덱스를 사용해서 쓸 수도 있고!

let (statusCode, statusMessage) = https404Error

print("The status code is \(statusCode)")
//The status code is 404
print("The status message is \(statusMessage)")
//The status message is HTTPS Error

이런 식으로 새로운 튜플에 값을 넣어서 쓸 수도 있삼.

let (statusCode, _) = https404Error

print("The status code is \(statusCode)")
//The status code is 404

이렇게 다른 값이 안물안궁이면 그 자리에 _를 넣어서 값을 안 받고 무시할 수도 있음.
마지막으루

let https404Error = (statusCode: 404, statusMessage: "HTTPS Error")

print("The status code is \(https404Error.statusCode)")
//The status code is 404
print("The status message is \(https404Error.statusMessage)")
//The status message is HTTPS Error

이렇게 함수 매개변수 받을 때 이름 설정하는 것처럼 튜플에도 이름을 설정해서 받을 수 있다.
사용은 인덱스로도 할 수 있고, 당연히 설정해둔 이름으로도 값을 받아 쓸 수가 있음.

요 튜플은 함수 반환값을 설정할 때 요긴하게 쓰인다고 함.
보통 리턴값을 하나 이상 주려면 C에서는 배열을 썼던 것 같은데 스위프트에서는 튜플을 많이 사용한다고 한다.
심지어 배열로 주는 건 자료형을 통일해서 줘야 했었는데 튜플은 여러 개의 자료형을 넣을 수 있다 보니 훠얼씬 유리한 것 같음.

내일은 옵셔널에 대해서 공부해 보자.

profile
ios developer
post-custom-banner

0개의 댓글