Array와 List의 차이점에 대해 설명해주세요.
Array와 List는 둘다 선형 데이터 구조를 가지고 있습니다. 하지만 Array는 연속적인 메모리 공간에 저장하고 List는 비연속적인 공간에 저장한다는 차이점이 있습니다. 따라서, 데이터에 접근하려고 할때 Array에서는 Index를 사용하여 접근하지만, List에서는 각 노드에서 다음 노드의 주소 정보를 가지고 있기 때문에 노드를 순차적으로 탐색해서 해당 데이터까지 이동해야합니다. 또한 Array는 삽입과 삭제를 하면 요소들을 한칸씩 이동시켜야 하지만 List에서는 주소값만 연결시키면 되기 때문에 상대적으로 삽입과 삭제에 용이합니다.
Stack과 Heap에 대해 설명해주세요.
Stack은 후입 선출 방식으로, 가장 나중에 들어온 데이터가 가장 먼저 인출되는 자료구조이고, 힙은 우선순위 큐를 위해 고안된 완전 이진트리 형태를 가지고 있으며, 최대값과 최소값을 빠르게 찾아내도록 만들어진 자료구조입니다. 메모리 측면에서 Stack영역은 속도가 빠르지만 영역이 고정되어 있어 지역변수, 함수호출, Struct가 할당되고 Heap영역에서는 메모리가 동적으로 할당되지만 상대적으로 속도가 느리기 때문에 Class 같은 ARC가 관리해야할 대상이 할당됩니다.
동기와 비동기에 대해 설명해주세요.
동기는 한 작업이 시작되면 해당 작업이 완료될 때까지 다른 작업이 기다리며, 그 작업이 끝날때까지 다른 작업을 할 수 없습니다.(Blocking). 비동기는 작업이 독립적으로 실행되며 작업의 완료 여부를 기다리지 않고 다른 작업을 실행할 수 있는 방식(Non Blocking)입니다.(따라서, 사용하는 스레드 수와는 상관이없다.... 이 부분 실수함 ㅠ)
GCD와 Concurrency의 차이점에 대해 설명해주세요.
우선 GCD(Grand Central Dispatch)와 Conccurrency 둘다 Swift에서 비동기 처리를 위해 나온 기술입니다. 먼저 나온 GCD는 DispatchQueue라는 선입 선출 Queue에 넣어 스레드를 할당하는 방식인데, 작업이 완료된 시점에 Completion Handler를 통해 후속 작업을 처리합니다. GCD에서는 스레드가 차단될때마다 새로운 스레드를 가져오게 되는데 이때 과도하게 스레드가 많아지는 문제점을 해결하기 위해서 스레드를 재사용하는 Swift Conccurrency가 도입되었습니다. 또한, 기존 GCD는 콜백 지옥을 유발할 수 있지만 Swift Concurrency에서는 async/await를 통해 위에서 아래로 흐름이 단순한 코드를 작성할 수 있습니다.
댓글