Protocol과 Generic 의 Swift6 (Existential any) 이번글은 업데이트될 Swift6 를 위해 공부한 자료입니다. Existential Type 이란? 직역 하자면 실존 타입 으로 우리가 게속 사용했던 개념이다. Swift Documents- Protocol 문서의 Protocols as Types 파트 도입부를 읽어보면 다음과같이 설명되어있다. Using a protocol as a type is sometimes called an existential type 프로토콜을 타입으로 사용하는 것은 existential type 이라고 불리기도한다. 아래의 예시 코드는 existential type 을 활용한 예시 코드. protocol Pet { func eat() } stru..
defer defer 란 무엇인가? defer 란 사전적 정의로는 연기하다, 지연되다, 미루다 이다. 함수 안에서 주로 사용되며 작성된 위치와 관계없이 함수종료 직전에 실행 된다. defer 내부에 작성된 코드들이 함수 끝나기 직전에 행 해진다는 뜻이다. defer 사용 방법 어렵지 않다 defer 키워드를 사용하고 중괄호를 열어 내부를 작성하고 중괄호를 닫으면 완성이다! 예시를 보도록 하자 func f() { defer { print("First defer") } print("End of function") } f() // Prints "End of function" // Prints "First defer" 기존 함수의 사이클이라면 함수f를 호출하게되면 "First defer" "Second defe..
ARC 자동 참조 카운팅 (Automatic Reference Counting) ARC 자동 참조 카운팅 (Automatic Reference Counting) swift는 앱의 메모리 사용량을 관리하기 위해 ARC 를 사용한다. ARC 는 클래스 인스턴스가 더이상 사용되지 않을때 자동으로 메모리에서 해제 시켜준다. ARC 는 해당 클래스의 RC(Reference Counting) 를 통해 사용하고있는지 사용되지 않는지 알수있고 이를 통해 자동으로 메모리에서 해제가 가능하게 된다. 클래스의 저장 방식 클래스를 인스턴스화 하게되면 stack 에는 heap 을 가르키는 포인터가 저장된다. 이때 heap 영역을 참조하게 되므로 RC 는 1 이된다. RC 는 heap 영역에 같이 저장된다. RC 를 측정하기 위..
Hash Table과 Hashable HashTable이란? 자료구조중 하나이며 Swift에서는 딕셔너리를 사용해 해시테이블을 사용할수있다! 딕셔너리는 Key-Value로 값을 저장한다. 딕셔너리가 해시 테이블로 구현되어 있기 때문에 해시 테이블도 Key-Value로 값을 저장한다. 해시테이블은 내부적으로 배열로 구현되어 있다. Key-Value 값을 저장함수를 통해 배열에 저장 한다고 보면되겠다. 예시를 보자! 위의 사진처럼 Key-Value 를 HashTable 에 저장하려고 한다! 이때 HashTable 에 저장하려고 할때 순서대로(0, 1...) 저장된다면 해시테이블이아니라 일반 배열이다. 해시테이블은 데이터가 순서를 지키지 않고 저장된다! 예시 사진은 저장하려는 값이 2개밖에없지만...무튼 해시..
UML swift 는 UML 을통해 100% 표현할수 없다. UML정의 UML: Unified Modeling Language 통합 모델링 언어 UML 은 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어이다. UML 은 소프트웨어 집약 시스템의 시각적 모델을 만들기 위한 도안 표기법(클래스 다이어그램)을 포함한다. 개요 모델을 만드는 표준 언어 라고 할수있다. UML은 객체지향 프로그래밍 소프트웨어 를 개발할 때 명세화, 시각화, 문서화 하기 위해 사용할수 있다. UML을 이용해 시스템의 구조적 청사진을 시각화 하는 표준안을 제공할수 있다. 모델 이란 것은 어떤 것을 실제로 만들때 이렇게 만들면 잘 작동할지 미리 검증해 보는 것이며 실제 물건을 만드는 비용보다 비용이 훨씬 적을 경우에 모델을 만들..
참고한 문서 ARC공식문서 제드블로그 ARC 자동 참조 카운팅 (Automatic Reference Counting) swift는 앱의 메모리 사용량을 관리하기 위해 ARC 를 사용한다. ARC 는 클래스 인스턴스가 더이상 사용되지 않을때 자동으로 메모리에서 해제 시켜준다. ARC 는 해당 클래스의 RC(Reference Counting) 를 통해 사용하고있는지 사용되지 않는지 알수있고 이를 통해 자동으로 메모리에서 해제가 가능하게 된다. 클래스의 저장 방식 클래스를 인스턴스화 하게되면 stack 에는 heap 을 가르키는 포인터가 저장된다. 이때 heap 영역을 참조하게 되므로 RC 는 1 이된다. RC 는 heap 영역에 같이 저장된다. RC 를 측정하기 위해 메모리를 조금더 사용한다고 할수 있겠다...
참고한 문서 공식문서 클로저 개발자 소들이 블로그 Closure 클로저란 익명 함수 즉 기존 사용하던 함수들도 클로저에 속한다. 클로저 > 함수 (클로저가 더 큰 개념이다! 함수가 클로저의 부분 집합!) 그치만 편의상 클로저라고 말하는것은 여기서 이름없는 함수 를 뜻하게된다. 이름 없는 함수라고도 할수 있으며 코드의 블럭 이라고도 표현할수 있겠다. Swift에서는 함수 패러다임 언어이기 때문에 함수는 1급 객체 이다. 그런고로 클로저도 1급 객체다! 상수나 변수에 대입하는것도 가능하며 함수의 타입에 따라 파라미터로 사용할수도 있다. Closure 표현식 이름 없는 함수 이기때문에 func 키워드를 작성하지 않으며 클로저는 Head, Body 로 이루어져 있다. { (parameters)->return T..
sync, async 사용법 동기(sync) 는 작업이 처리되기를 기다리는것. 비동기(async)는 작업이 처리되기를 기다리지 않고 다른 스레드에서 처리되는것. sync는 동기로 작업을 처리하겠다는 메서드. DispatchQueue.global().sync {} 를 호출한것은 main 스레드말고 새로운 스레드를 만들어서 작업을 처리할거야, 그런데 내작업이 끝날때까지 기다려야해 라는 의미가 된다. async는 비동기로 작업을 처리하겠다는 메서드. DispatchQueue.global().async {} 를 호출한것은 main스레드 말고 새로운 스레드를 만들어서 작업을 처리할거야, 그런데 다음 작업이 있다면 끝날떄까지 기다리지말고 처리해도 좋아! 난 새스레드 에서 알아서 작업할게! 라는 의미가 된다. 위의 ..