일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- c++
- 스위프트
- swift concurrency
- 웹
- 백준
- 멋사
- uikit
- 위젯킷
- TCA
- 문법
- SwiftUI
- ReactorKit
- composable architecture
- widgetkit
- 컴퓨터그래픽스
- 후기
- cs
- Protocol
- dispatchqueue
- 대외활동
- Swift
- 운영체제
- 네트워크
- widget
- 리액트
- 멋쟁이사자처럼
- 스유
- 알고리즘
- 영남대
- spritekit
- Today
- Total
목록Swift (92)
맛동산이
struct Person { var name: String var age: Int } let jinyong = Person(name: "jin", age: 28) let jung = Person(name: "jung", age: 27) let shana = Person(name: "shana", age: 25) let people = [jinyong, jung, shana] var name = people.map { $0.name } // name = ["jin", "jung", "shana"] 이러한 코드가 있을때, 키패스를 사용하면 다음과 같이 동일하게 작동한다. var name = people.map { $0.name } var name = people.map(\.name) 키패스와 동일하게 작동하..

Cache 캐시(cache, 문화어: 캐쉬, 고속완충기, 고속완충기억기)는 컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. -위키피디아- memory 와 filemanager in memory 방식은 데이터의 읽기 성능을 높이기 위해서 DB와 같은 저장소에서 빠르게 가져올수 있는 메모리에 데이터를 올려두는 방식이다. Filemanager 방식은 파일 매니저를 이용하여 데이터를 파일 형식으로 디스크에 저장한다. 두개의 차이는 앱을 종료 해도 데이터가 남는지의 차이이다. 당연히 메모리는 날라가고, 파일로 저장된건 영구저장 swift에서는 in memory는 nscahce이며, filemanager는 userdefaults방식이다. userdefaults는 in memory 이지만, 동..
Framework Vs Library 프레임워크 '특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램' 라이브러리 ‘소프트웨어를 개발하기 쉽게 도와주는 여러 기능을 제공하는 도구’ 가장 큰 차이점은 통제권이다. 프레임워크는, 통제권이 프레임워크한테 있다. 우리가 어떠한 소프트웨어를 만들기 위해서 특정 프레임워크를 사용한다면, 해당 프레임워크가 제공하는 룰 을 꼭 지켜서 만들어야 한다. 하지만 라이브러리는 그렇지 않다. 개발자가 원할때, 호출하는 것으로 능동적으로 사용할수 있는 도구인것. Static Library c언어에서의 static library는, 소스코드를 컴파일후 생성되는 object코드에서 static link방식으로 라이브러리를 link하고 이를 통해 실행파일이 생..
병렬 프로그래밍(Parallel Programming) 병렬프로그래밍이란, 여러개의 cpu가 하나의 task를 나눠서 처리하는것을 의미한다. 즉 예를들어, 파스타를 하나 만든다면 4개의 cpu가 서로, 면삶기, 소스만들기, 접시준비하기, 노래틀기 와 같이 일을 나눠서 한다고 생각하면 된다. 병렬프로그래밍이란, 멀티코어를 활용한 방법이다. 동시성 프로그래밍(Concurrent Programming) 동시성프로그래밍이란, 하나의 cpu가 동시에 여러개의 작업을 하는것을 의미하며, 실제로는 빠른속도의 context switching을 통해서 여러개를 동시하는것처럼 보이는 시분할 작업방법을 의미한다. 동시성 프로그래밍은 기존의 순서대로 명령들이 실행되는 구조에서 벗어나 명령들이 불규칙한 순서대로 실행될 수 있게..
app thinning app thinning이란, 앱스토어에서 디바이스로 앱을 다운받을때, 디바이스 특성에 맞게 최적화 되서 다운받도록 하는 최적화 기술이다. 이를 통해서 빠른 설치와 최소한의 디스크 사용을 보장받는다. - 슬라이싱 - 비트코드 - On Demand Resource 3개의 기술로 이루어져 있다. 슬라이싱 앱 내부에는 이렇게 다양한 소스코드와, 다양한 리소스들이 존재한다. 특히나 앱에서는, 다양한 운영체제와 아키텍쳐에 있어서 구분되는 다양한 코드들이 존재한다. 이를 우리의 디바이스에서 다운을 받게 되면, 앱스토어에서 디바이스의 특징을 보고 이렇게 디바이스특성에 맞는 리소스와 코드만을 조합해서 IPA를 생성한다. 비트코드 비트코드 는 컴파일된 프로그램의 중간 표현이다. 비트코드가 포함된 A..
이재성 씨의 깃허브, ios 면접 준비 질문에 있는 앱이 시작할 때 main.c 에 있는 UIApplicationMain 함수에 의해서 생성되는 객체는 무엇인가? 에 대한 대답이다. 해당 내용은 app life cycle과 관련되어 있는 내용이다. 앱의 실행과정 UIApplicationMain() uiapplicationMain함수는 application object와 delegate 객체를 생성하고, event cycle을 셋업하기 위한 함수이다. 4개의 파라미터를 받는데 다음과 같다. argc : argv의 개수 argv : argument의 변수 목록 int main( int argc, char* argv[])의 원형에서 따온 argv, argv이다. principalClassName : UIApp..
Concurrent라는 뜻 iOS에서는 time Slicing을 하고 있다. (당연한 이야기) 따라서 single Thread라면, context switching을 통해서 병렬적 작업을 muti Thread라면 parallelism하게 동작한다. DispatchQueue DispatchQueue는 GCD의 쓰레드의 관리를 위한 객체가 존재함 해당 객체의 존재는 serial 과 concurrent queue두개가 존재 serial : task의 시간을 보장해주며, 순차적으로 진행 concurrent : 동시에 여러 task를 수행할수 있음 기본적으로 serial임. let queue = DispatchQueue(label: "start") queue.async { for i in 0...5 { sleep..
이전에도 다양하게 다룬적이 있지만 이제야 좀 정리가 되는느낌이라 다시한번 정리하려고 합니다. Thread 스레드는 cpu에서 바라보는 작업단위이다. 프로그램은 저장소에 저장되어있는 코드 덩어리이고, 이 코드덩어리가 메모리에 올라간 상태를 프로세스라고 한다. 프로세스는 cpu가 할당되어진 프로그램의 상태인것 프로세스 내부에서 동시성(time slicing)방식으로 여러개의 일을 처리할수 있는데, 이때 생성되는 독자적인 프로세스 내부의 작업 단위를 스레드라고한다. ex) 크롬이라는 프로그램이 메모리에 올라가면 프로세스, 해당 크롬에서 여러개의 창이 켜진상태를 여러 스레드가 존재한다고 생각하면 쉽다. Thread pool 위의 스레드 생성방식에서 계속해서 새로운 스레드를 생성하는것은 좀 불필요한 작업일수 있기..
rethrows란 함수를 파라미터로 받는 함수에서 에러가 발생할수 있음을 의미하는 키워드이다. 즉 최소 한개 이상의 에러를 throw하는 함수를 매개변수로 받아야 한다. 간단한 예제는 다음과 같다. enum Errors: Error { case someError } func throwErrors(about value: Int) throws -> Int { if value == 0 { throw Errors.someError } return value } func checkThrow(completion: (Int) -> Int ) { do { try throwErrors(about: 0) } catch (let error) { print(error.localizedDescription) } } checkT..