넥스터즈 면접에서 actor 관련 질문을 받았을때, actor hopping으로 인해 성능 이슈가 있다는 답변을 받고, 한번 알아보았다. 사실 actor를 쓸때 컴파일 타임에 data race 막아주네? -> 개꿀이네? -> 써야겠네? 이런 흐름으로 큰 생각없이 actor를 썼는데 성능 이슈같은게 있는줄 생각도 못했다.Actor Hopping이란?다른 스레드나 다른 Actor에서 작업하다가 특정 Actor의 프로퍼티나 메서드를 호출(await)하면, 실행 흐름이 기존 컨텍스트에서 새로운 Actor의 컨텍스트로 전환되어야 합니다. 이 전환 과정을 Actor Hopping이라 한다. 성능 이슈가 나타나는 케이스컨텍스트 스위칭이 자주 일어나는 경우await를 만나서 스레드를 전환하거나, suspend 시키고 ..
MVI패턴을 이용하여 프로젝트를 진행하면서, 기존 MVVM-In/Out 패턴에서 사용하던 ViewModel 테스트 코드 작성 방식으로는 상태값을 검증하지 못하는 이슈가 발생했다. 기존 MVVM 패턴은 input과 그 input에 대한 상태값의 변경인 output을 받아 화면을 갱신하는 구조여서 output에 대한 검증만 하면 되었지만, MVI 패턴은 State를 UI가 의존하는 구조로 intent에 따라 State의 값이 변경되는 구조로, State가 어느 시점에 변경이 되고 종료되는지를 외부에서 알 수가 없다. 예를 하나 들어보자면 다음과 같이 ViewModel을 정의했다고 가정한다.struct ImageFeedState { var images: [IFImage] = [] var isLoad..
내가 담당하고 있는 앱(차량 블랙박스 앱)의 기능 중 라이브 스트리밍 기능이 있는데, 기존에는 AVPlayer를 이용하여 영상을 재생하고 있었다. 그런데 새로운 블랙박스 연동 작업을 하던 중 스트리밍이 재생되지 않았다(까만 화면만 나옴). 분명 재생 관련 코드는 건드리지 않았는데도 말이다. 처음에는 내 작업으로 인한 사이드 이펙트라고 생각해 관련 코드를 확인해 봤지만, 변경된 부분은 없었다. 그래서 기존에 지원되던 단말로 스트리밍을 시도해 보니 정상적으로 재생되는 것을 확인했다. 또한 AVPlayer에서 AVPlayerItem의 프로퍼티들(status, error 등)을 KVO로 디버깅해 봤으나, 별다른 로그도 출력되지 않았다. 그래서 선임 개발자께 해당 이슈를 정리해서 문의했고, 이전 블랙박스와 신규 ..
https://www.acmicpc.net/problem/2579 계단의 점화식 문제.특정 계단에서 얻을 수 있는 점수는 다음과 같다.n-1, n 이렇게 연속적으로 접근n-2, n 이렇게 떨어져서 접근따라서 다음과 같은 점화식이 세워짐dp[i-3]+stair[i-1]+stait[i] (연속적으로 계단에 접근한 경우)dp[i-2]+stair[i] (비연속적으로 계단에 접근한 경우)import Foundationlet n = Int(readLine()!)!var stairtArr: [Int] = []for _ in 0..
https://www.acmicpc.net/problem/2805 이분 탐색을 이용하여 자르는 부분의 범위를 구하는 문제. import Foundationlet nm = readLine()!.split(separator: " ").map{Int($0)!}let treeArr = readLine()!.split(separator: " ").map{ Int($0)! }var start = 1var end = treeArr.max()!while start mid { count += tree-mid } } if count >= nm[1] { start = mid+1 } else { end = mid-1 }}print(end)