상세 컨텐츠

본문 제목

[SeSAC] 220805_TIL (클로저, Sync, Async)

IOS/TIL

by 카키IOS 2022. 8. 5. 12:06

본문

1.클로저

let A: (Int) -> () //Int(정수형)파라미터를 갖고, 반환형이 없음(=Void)

let B: (Double) -> Double //Double(더블형)파라미터를 갖고, Double(더블형) 반환

let C: (String) -> Void //String(문자형)파라미터를 갖고, 반환형이 없음(=Void)

 

보편적인 함수 형태 vs 클로저의 형태

//함수
func normalFunc(string: String) -> String {
	return "func = \(string)"
}

func mathAdd(a: Int, b: Int) -> Int {
	let result = a + b
    return result
}

//클로저
let _ = {(string: String) -> String in
	return "func = \(string)"
}

let _ = {(a: Int, b: Int) -> Int in
	let result = a + b
    return result
}

 

//{ ... } => 중괄호 자체를 클로저라고 생각하면 쉽다

//ex) 
let A = { ( ) -> ( ) in
	print("클로저")
}

print(A) //Function
A() // 클로저

 

// 예시함수
func functionA(_ name: String) -> String {
	return name + "!!!"
}

func functionB(_ name: String) -> String {
	return name + "????"
}

//기능1. 함수를 변수에 할당할 수 있다
var A: (String) -> (String) = functionA //*** 함수를 변수에 할당 ***

A("클로저") // 클로저!!!

B = functionB //*** 함수를 변수에 할당 ***

B("클로저") // 클로저????

//클로저 리터럴C
let C = { (par: String) -> String in
	return par + "!!!"
}

c("클로저") // 클로저!!!

 

 

2.Sync vs Async

큐에 들어간 작업이 끝날 때 까지 기다렸다가 다음 작업을 할까 = 동기(Sync)

작업 큐에 보내놓고 바로 다음 작업을 할까? = 비동기(Async)

 

Sync(동기)

-실행중인 작업이 끝나야 다음 작업을 시작할 수 있음(= 한번에 하나의 작업만 가능)

-결과의 순서가 중요할때 사용

 

Async(비동기)

-실행중인 작업이 끝나지 않더라도 다음 작업을 시작할 수 있음(= 한번에 여러 작업을 할 수 있음)

-작업이 먼저 실행됐다고 해서 먼저 끝나는것이 아님(= 작업 순서가 보장되지 않음)

-동기 코드가 끝나야 비동기 코드가 실행됨

 

//시리얼 내용 추가

 

728x90
반응형

관련글 더보기