GCD와 Swift Concurrency

두 API 모두 동시성 프로그래밍을 위해 사용되는 기술이다. GCD가 먼저 만들어지고 Swift Concurrency가 그 이후에 나오게 되었다.

GCD

호출한 함수를 비동기로 작업을 수행하고 탈출 클로저를 통한 작업이 끝났을 때의 처리 진행

Swift Concurrency

async, await 을 통한 가독성이 좋은 코드를 작성하고자 도입된 개념.

왜 도입 되었는가? - 가독성

https://github.com/apple/swift-evolution/blob/main/proposals/0296-async-await.md#problem-1-pyramid-of-doom

위의 링크에는 GCD로 작성된 코드로 코드가 깊어지면 깊어질수록 들여쓰기가 너무 많아져 가독성이 너무 저하된다는 내용이 작성되어 있습니다.

func GCDTest(completion: (_ result: Image) -> Void) {
	test1() { test1 in
		test2() { test2 in
			test3() { test3 in
				test4() { test4 in
					completion(test4)
				}
			}
		}
	}
}

이런식으로 completion Handler가 깊어짐에 따라 가독성이 너무 안좋아지는 문제가 생겼습니다.

func ConcurrencyTest() async throws -> Image {
	let test1 = await test1()
	let test2 = await test2()
	let test3 = await test3()
	let test4 = await test4()
	
	return test4
}

순식간에 들여쓰기가 사라지고 가독성이 좋은 코드가 된 모습을 볼 수 있습니다.

왜 도입 되었는가? - 에러 핸들링 안전성