목록Swift (63)
study record
Concurrency Swift는 구조적인 방식으로 비동기적이며 병렬적인 코드를 쓰는 것을 지원하도록 만들어졌다. 비록 프로그램의 한 조각만이 한 번에 실행되지만 Asynchronous code는 중단되고 이후에 재개될 수 있다. 프로그램에서 중단되고 재개되는 코드는 UI 업데이트 같은 짧은 기간의 실행을 네트워크로 데이터 가져오기 또는 파일 파싱 같은 장시간의 작업을 하는 동안에 계속되게 한다. Parallel code는 동시에 코드의 다양한 조각을 실행하는 것을 의미한다. 예를들어, 4개의 코어 프로세서를 가진 하나의 컴퓨터가 동시에 코드의 4조각을 각각의 코어가 테스크들의 하나씩 이행하며 실행할 수 있는 것이다. parallel, asynchronous 프로그램은 한 번에 다양한 작업을 실행한다. ..
클로저란? 클로저는 코드블럭으로 어떤 상수나 변수의 참조를 캡쳐해 저장할 수 있다. 스위프트는 캡처 관련 메모리를 알아서 처리한다. 클로저의 세 가지 형태 전역 함수 : 이름이 있고 어떤 값도 캡처하지 않는 클로저 중첩 함수 : 이름이 있고 관련한 함수로부터 값을 캡쳐할 수 있는 클로저 클로저 표현 : 경량화된 문법으로 쓰여지고 관련된 문맥으로부터 값을 캡쳐할 수 있는 이름이 없는 클로저 클로저에서는 argument label 은 쓰이지 않고 parameter name만 쓰임 closure("Sodeul") closure(name: "Sodeul") //error! 클로저는 익명이지만 함수이므로 1급 객체 함수의 특성을 다 가지고 있다. 클로저를 변수나 상수에 대입할 수 있다. 함수의 파라미터 타입으로 ..
참조 타입은 하나의 인스턴스가 참조를 통해 여러 곳에서 접근하기 때문에 언제 메모리에서 해제되는가가 중요한 문제이다. 적절한 시점에 인스턴스가 해제되지 않으면 한정적인 메모리 자원을 낭비하게 되고, 이는 성능 저하로 이어질 수 있다. Swift는 프로그램의 메모리 사용을 관리하기 위해 메모리 관리 기법인 ARC(Automatic Reference Counting)을 사용한다. ARC가 관리해주는 Reference Counting (참조 횟수 계산)은 참조 타입인 클래스의 인스턴스에만 적용된다. 구조체나 열거형은 값 타입으로 다른 곳에서 참조하지 않기 때문에 ARC로 관리할 필요가 없다. ARC란? ARC는 자동으로 메모리를 관리해주는 방식이다. 대부분의 경우 메모리 관리는 Swift에서 그냥 작동하기 때..
Dispatch란? Dispatch란 어떤 메서드를 호출할 것인지를 결정하여, 그것을 실행하는 메커니즘이다. Swift에서는 Static Dispatch와 Dynamic Dispatch 두 가지 방식이 있다. 즉, 호출할 함수를 "컴파일 타임"에 결정하느냐, "런타임"에 결정하냐에 따른 방식이다. Static Dispatch(Direct Call) "컴파일 타임"에 호출될 함수를 결정하여, 런타임 때 그대로 실행한다. 컴파일 타임에 결정이 되기 때문에 성능상 이점을 가질 수 있다. Dynamic Dispatch(Indirect Call) "런타임"에 호출될 함수를 결정한다. Swift에서는 클래스마다 함수 포인터들의 배열인 vTable(Virtual Dispatch Table)을 유지한다. 하위 클래스가..