아두이노와 블루투스를 이용한 원격 제어 스위치로 침대 밖을 최소화하자

누워서 원격으로 불을 끄고 싶다,, 하지만 제품들은 너무 비싸,, 집에 있는 아두이노로 비벼볼 수 없을까?

아두이노 스마트 스위치 만들기 바로 시작해봅시다!

미리보기


경쟁 상태(Race Condition) 해결 방법에 대해 알아봅시다 — Serial queue + sync

Previously on GCD…

저번 시간에는 아래의 세가지 동시성 문제 중 첫번째 경쟁 상태에 대해 알아보았어요!

  1. Race Condition (경쟁 상태)
  2. Deadlock (교착상태)
  3. Priority Inversion (우선 순위의 뒤바뀜)

경쟁 상태란 “두 개 이상의 스레드를 사용하면서, 동일한 메모리 접근 등으로 인해 발생할 수 있는 문제”로 정의 내린 후, 두 개의 스레드가 동일 메모리에 접근하여 자료의 일관성을 해치는 예시를 살펴보았습니다.

그럼 이번 시간에는 경쟁상태에 대한 해결 방안에 대해 다뤄볼건데요! 자원에 다수의 스레드가 접근해서 문제가 되는거니까 한번에 한개의 스레드만 접근 가능하도록 처리하면 되겠죠?! (Thread-safe)

경쟁 상태 확인 방법 — TSan (Thread Sanitizer)

그럼 경쟁 상황이 …


동시성과 관련된 문제들 (Concurrency Problems) 중 경쟁 상태(Race Condition)에 대해 알아봅시다

Previously on GCD…

대박대박대박버거~~~~ 개-하! (개발자들 하이라는 뜻)

이게 몇만년만의 GCD람요~~!! 사실 글 초안은 좀좀따리 써놨었는데 주제가 주제인지라.. ㅎㅎㅎ 기약 없이 미루다보니 벌써 두달이 지났네유 ◠‿◠ .. ㅎㅎ (사실 저는 예전에 강의도 다 들음여~~!!) 튼 아무래도 글이 길어지면 더 안쓰게 되는 것도 있는거 같아서 끊어 쓰려고요 ㅎ

저번 시간에는 DispatchSemaphore에 대해 다뤘는데 ㄱ나니..? (아련) 흠 사실 저도 안난답니다!

당-당

하지만 괜찮아여 기억 안나는건 또 보면 되는거고 오늘은 새로운 마음가짐으로 동시성 문제를 다룰거니까여~~ 그럼 각설하고 고고링~!

동시성 문제 (Concurrency Problem)

우리는 2강? 3강?에서 concurrency 의 …


VNDetectHumanHandPoseRequest 를 이용해보자

WWDC 2020 에서 Detect Body and Hand Pose with Vision 이라는 흥미돋 세션을 봤따 (뒷북)

이제 손 모양 / 몸 모양 (?)도 인식할 수 있게 해줄게! ㅎㅎ 이런 느낌이었는데 발표 예제가 넘 신기했다

무려 이렇게 엄지랑 검지 모으고 글자를 쓸 수 있게 하는 것는데.. 간 지 나

VNDetectHumanHandPoseRequest


눼에? UIView()UIView의 initializer가 아니라구여?

안녕하세여 여러분. 흠 원래 required init?(coder: NSCoder) 에 대해 쓰려다가 또 딴 길로 새버렸네유. 이 내용은 다른 곳에서도 충분히 잘 설명되어있는 것 같아서 그건 TIL에 개인적으로 정리하기로 하고..!

지금까지 UIView() 잘 써오셨나요?? 거두절미하고 UIView의 문서에서 initializer 를 보자요.

맞아여 이렇게 두개예요. 읭?? 근데 나는 UIView() 이렇게도 써왔는데?!!?!?! 왜 init() 에 대한 설명은 없는겨..?


Value Type은 cow를 한다면서 왜 Array만 동일 instance에 대해 같은 주소를 반환할까요?

들어가며

흠.. 제목이 딱 맘에 들진 않네유.. 부제에 집중해주세요! (이걸 제목으로 쓰기엔 너무 길었어요 흑흑)

튼 오늘은

Value Type은 cow를 한다면서 왜 Array만 동일 instance에 대해 같은 주소를 반환할까?

에 대한 이야기입니다. 무슨 말이냐고요? 일단 스크롤을 내려봅시다 ㅎㅎ 그럼 고고링~!

의문의 시작

얼마전 Swift의 Type에 대해 공부하다가 OptimizationTips 문서에서 기본 Value Type은 copy on write 최적화를 사용한다는 것을 보았습니다.

All standard library containers in Swift are value types that use COW (copy-on-w …


Value Type이 Heap에 할당 될 때가 있다구여???

Swift의 Type

Swift의 Type 은 크게 두 카테고리로 나뉩니다.

1. Value Type

  • struct, enum, tuple
  • Swift의 기본 자료형 타입 (Int, Float, Double, Bool, String, Array, Dictionary, Set 등은 모두 struct 형태로 구현)

2. Reference Type

  • class, function, closure

이 두가지의 차이점은 뭘까요? 바로 Copying 의 동작에 차이가 있습니다.

Value Type 은 copying시 data의 unique한 복사본을 생성합니다. 반면 Reference Typeshared instance 를 사용합니다. 따라서 두번째 변수에 할당된 instance 의 값을 변경하면 기존 값도 같이 …


Storage Access API 를 이용해서 쿠키 정보를 가져옵시다

TL; DR

iOS 14 부터 개인 정보 보호 정책으로 third party cookie 사용이 막힘. 이에 파생되는 이슈에 대해선 Storage Access API 를 사용

쿠키 배경 지식

First-party cookie

  • 유저가 website 를 방문할때마다 생성됨.
  • website에 따라 쿠키에 무엇을 수집하고 저장할지 결정함으로서 유저 경험을 향상시키고자 함. (만약 쿠키가 없다면 새로 고침 때마다 로그인 다시 하거나, 장바구니 다시 담아야함)

Third-party cookie

  • 현재 유저가 방문한 웹 사이트 외 다른 곳에 의해 생성된 쿠키.
  • 유저가 들어간 A / B 도메인에서 각각 facebook.com 에서 코드를 로드하고 있다면, facebook.com 에 해당하는 쿠키가 자체적으로 생성될 수 있는데 이것이 …


DispatchSemaphore 에 대해 알아봅시다

Previously on GCD…

개-하! 저번 시간에는 작업을 class 로 만들어서 취소 / 순서 기능을 사용할 수 있는 DispatchWorkItem에 대해 알아봤는데요!

오늘은 한번에 수행할 수 있는 작업의 수를 제한하는 DispatchSemaphore에 대해 알아보도록 합시다. 가벼운 내용이니까 가벼운 맘으로 고고! 라고 쓰고 시작했는데 쓰다보니 무거워진거 같아요.. 족굼은 마음의 준비를 하고 내리시길.. ㅎㅎ

Semaphore

여러분 Semaphore 에 대해 아시나여? 위키의 정의를 잠깐 가져와봅시다.

정수 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용된다.

스레드가 공유 자원의 배타적인 사용을 보장받기 위해서 임계 구역에 들 …


DispatchWorkItem 에 대해 알아봅시다

Previously on GCD…

지난 시간에는 Dispatch Group에 비동기 작업이 포함된 task 를 보낼때는 enter()leave()를 사용해야 함! 까지 살펴보았는데요, 이번 시간에는 DispatchWorkItem 을 알아보도록 합시다.

DispatchWorkItem

우리는 지금까지 원하는 작업들을 클로저 안에 넣어서 처리해왔습니다.

그러다 이런 생각을 하게 됐을지도 모르죠..!

🤔 : 흠.. 나는 작업들을 closure 묶어 보내는 대신, 아예 class 로 캡슐화해서 묶어버리고 싶다고!

앗 물론 이렇게 생각한 사람에 저는 포함되지 않습니다 ◠‿◠ 튼 이제 무슨 말이 나올지 아시겠죠? ㅎㅎ

DispatchWorkItem은 지금껏 closure로 보내왔던 작업이 캡슐화 된 …

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store