일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- Hitit
- IOS
- 리액트 예제
- 계명대 이종호
- 자료구조
- 자스민
- Svelte
- jest
- 계명대
- 이종호
- 개발
- 자바스크립트 자료구조
- 스벨트
- 힛잇
- 호키도키
- 리액트
- 스위프트
- queue
- 비동기
- 호키스
- hokeys
- TDD
- SWIFT
- HTML
- javascript
- 개발자
- data structure
- hokidoki
- 자바스크립트
- react
- Today
- Total
목록IOS/Swift (24)
Dog foot print
들어가기 앞서 Dispatch Queue는 어떤 쓰레드로 작업을 보내기 위한 대기행렬을 의미한다. 이 포스팅에서 다뤄볼 내용은 각 쓰레드 마다 어떤 역할을 하고 있고, 작업이 어떻게 이루어 지는지를 다뤄본다. Main Main 쓰레드로 작업을 보내기 위한 Queue이다. 이 Queue의 특징은 다음과 같다. Serial Queue 이다. 작업이 끝나야 다음 작업이 실행된다. Main Thread에게 작업을 요청한다. 유일한 쓰레드인 Main Thread 에게 요청 UI업데이트 작업을 요청 할 수 있다. 유일하게 UI업데이트를 요청 할 수 있다. sync메서드를 사용 할 수가 없다. 이 queue로 작업을 보낼 때 sync 메서드를 사용하여 코드를 처리하면 에러가 발생한다. 사용 예시 DispatchQue..
비동기와 동시의 차이 학생들과 이야기 해보면 비동기 와 동시 의 의미를 헷갈리는 경우가 종종 존재한다. Serial 과 Concurrent를 설명하기 전에 집고 넘어가도록 하자. 비동기는 말그대로 어떤 작업을 기다리지 않는다라는 의미이며, 동시라는 의미는 같은 시간에 어떤 작업이 말 그래도 동시에 일어 날 수 있는 것을 의미한다. Serial Queue SerialQueue는 순서가 중요한 작업들을 처리할 때 사용 되는 큐이다. 아래의 코드를 보도록 하자. let queue = DispatchQueue(label : "serial") queue.async{ sleep(3); print("1") } queue.async{ sleep(2); print("2") } queue.async{ sleep(1); p..
Async 비동기 Async는 어떤 작업이 끝나기를 기다리지 않고, 다음 작업이 실행되는 것을 의미한다. 아래의 코드를 보도록 하자 . import Foundation print("1") DispatchQueue.global().async(){ print("2") } print("3") 위의 코드는 순차적으로 실행되지 않는다. 이것을 그림으로 보면 다음과 같다. DispatchQueue.global().async 의 코드 역할은 블락에 있는 코드를 전달하는 것으로 이 코드의 역할은 마무리 된다. 그러므로 2번째 프린트 문을 기다리지 않고 print(3)이 출력된다. Sync 동기 Sync는 작업을 다른쓰레드에 시키고 그 일이 종료될 때 까지 기다린다는 의미이다. 아래의 코드를 보자 print("1") D..
쓰레드란 무엇인가 ? 쓰레드를 쉽게 이해하기위해서는 내 Application에서 동작하는 일꾼 이라고 생각 할 수 있다. 우리의 어플리케이션이 동작 할 때도 이런 쓰레드에게 일을 맡겨야 하는데, 우리가 만약 별도의 쓰레드에게 일을 맡기지 않는다면 메인 쓰레드 에서 일을 모두 하게 된다. 쓰레드를 생성하고 삭제하는 일을 꽤나 고난이도의 일이다. 그렇기에 IOS에서는 친절하게도 쓰레드를 생성하거나 삭제하는 일을 대신 해주고 우리는 별도의 쓰레드에게 일을 시키기만 하면 된다. 별도의 쓰레드에게 일을 시키는 이유 이런 의문이 들 수 있다. 현재까지 쓰레드를 나누지 않고, 잘만 사용 되던데요. 굳이 다른 쓰레드에게 일을 시키는 상황이 있을까요 ? 합리적인 질문이다. 우리의 IOS CPU의 성능은 정말이지 엄청나다..
[IOS] 동기적 작업과 비동기적 작업 동기적 작업 동기적 작업은 어떤 일련의 작업들이 순서를 기다리며 이전에 할 일이 끝나면 자신의 일을 하는 것을 의미 한다. 다음의 그림을 보며 이해하도록 하자. 위의 그림을 보면 손님은 여러명인데, 직원은 한 명이다. 이 경우 직원은 한명의 손님의 주문을 처리하기 위해 다음과 같은 절차를 가진다. 손님에게 주문을 받는다. 주문을 처리하기 위해 음식물을 제조한다. 음식물을 손님에게 전달한다. 다시 1로 이동 위와 같이 어떤 작업 실행이 순차적으로 진행 되는 것을 동기적 작업이라고 한다. 비동기적 작업 비동기적 작업은 작업의 순서 상관없이 발생하는 작업을 의미 한다. 아래의 그림을 보며 이해하도록 하자. 위의 그림도 동기적 작업 그림과 동일하지만 , 알람이 존재한다. ..
Protocol 애플의 진영에서는 인터페이스라는 것이 존재하지 않고, 프로토콜이라는 것이 존재한다. 어찌 보면 규약이라는 개념은 비슷하지만 그 규칙의 강제성이나, 제한은 인터페이스가 훨씬 높다. 즉 프로토콜이라는 개념은 최소한의 만족할 만한 규칙 이며, 인터페이스는 부가적인 것이 존재하지 않는 규칙으로 정리 할 수 있다. 프로토콜은 명세라고 불리우기도 하는데, 이는 특정한 것을 만들기 위한 설계서와 같은 역할을 한다. 이 프로토콜이라는 규칙을 준수하며 객체나 구조체, 열거형을 만드는 것을 프로토콜을 구현한다라고 표현 한다. 프로토콜의 구현 protocol [프로토콜 명]{ 프로토콜 명세 ... } class A : [protocol] { } extension A : [protocol] { } enum B..
Enumeration 한국에서는 열거형 이라고 불리우는 Enumeration은 객체와 구조체과 비슷하지만, 그 사용 용도나 기능은 훨씬 제한적인 자료형이다. 열거형은 특정 상수들의 집합을 의미하며, 여기서 특정 이란 어떤 분류에 속해 있다는 의미이다. 예를 들면 집합은 다음과 같다. 성별 남자, 여자, 기타 대구시의 행정구청 달서구, 서구, 달성군, 북구, 중구, 수성구, 동구 방향 동,서,남,북 국가코드 82,32,42,52,62,75 위의 조합을 가진 구조체나 객체를 만들어 더욱 강력한 기능을 만들어 내는 것도, 나쁘지 않아 보인다. 그러나, 위의 조합을 사용할 때는 항상 인스턴스화 가 선행되어야 하고, 이는 프로젝트 규모가 커질수록 개발자의 실수로 인하여, 런타임 오류 혹은 컴파일 오류 가 발생하기..
초기화 구문 초기화 구문은 init으로 시작되는 생성자 함수를 의미합니다. 초기화 구문의 가장 큰 목적은 인스턴스 마다 멤버 프로퍼티의 값을 “설정하기 위함” 입니다. TIP : 멤버 와이즈 초기화 구문은 구조체만 가능합니다. 초기화 메서드 특성 초기화 메서드의 형식은 다음과 같습니다. init([param] : [type]){ //실행할 코드 }Tip : 만약 설정할 멤버가 존재하지 않는다면 init 메서드는 생략 할 수 있습니다. 초기화 메서드의 특성은 다음과 같습니다. 초기화 메서드의 이름은 무조건 init 이다. 매개변수의 개수, 이름, 타입은 임의로 정할 수 있으나, 해당 init 구문을 통해서 옵셔널 타입을 제외한 모든 저장 프로퍼티는 값을 가지고 있어야 한다. 매개변수의 이름과 개수, 타입이..