본문 바로가기

분류 전체보기

(31)
[Programmers - level 2] 과제 진행하기 문제 설명 과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다. 과제는 시작하기로 한 시각이 되면 시작합니다. 새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다. 진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다. 만약, 과제를 끝낸 시각에 새로 시작해야 되는 과제와 잠시 멈춰둔 과제가 모두 있다면, 새로 시작해야 하는 과제부터 진행합니다. 멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다. 과제 계획을 담은 이차원 문자열 배열 plans가 매개변수로 주어질 때, 과제를 끝낸 순서대로 이름을 배열에 담아 return 하는 solution 함수를 완성해..
[Programmers - level 1] 2023 KAKAO BLIND RECRUITMENT - 개인정보 수집 유효기간 문제 설명 고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다. 예를 들어, A라는 약관의 유효기간이 12 달이고, 2021년 1월 5일에 수집된 개인정보가 A약관으로 수집되었다면 해당 개인정보는 2022년 1월 4일까지 보관 가능하며 2022년 1월 5일부터 파기해야 할 개인정보입니다. 당신은 오늘 날짜로 파기해야 할 개인정보 번호들을 구하려 합니다. 모든 달은 28일까지 있다고 가정합니다. 다음은 오늘 날짜가 2022.05.19일 ..
[Swift] Petpion - 과연 Swift Concurrency를 제대로 활용하고 있는가? 안녕하세요! 제 두 번째 개인 프로젝트 Petpion이 2023년 5월 27일 앱스토어에 출시가 되었습니다. Petpion은 제가 1부터 100까지 혼자 힘으로 개발한 앱입니다. 그래서 더욱 다양한 새로운 기술들을 시도해 본 앱 이기도 한데 그중 오늘은 Concurrency에 대하여 다루어 보려 합니다. WWDC 2015 - Building Responsive and Efficient Apps with GCD WWDC 2016 - Concurrent Programming With GCD in Swift 3 WWDC 2017 - Modernizing Grand Central Dispatch Usage WWDC 2022 - Eliminate data races using Swift Concurrency 20..
Discover Concurrency (4) - Asynchronous Task 자동 재실행 시키기 경우에 따라 일시적인 네트워크 문제를 해결하거나 특정 형태의 연결을 다시 설정하기 위해 실패한 비동기 작업을 자동으로 다시 재시도해야 하는 경우가 있다. struct SettingsLoader { var url: URL var urlSession = URLSession.shared var decoder = JSONDecoder() func load() -> AnyPublisher { urlSession .dataTaskPublisher(for: url) .map(\\.data) .decode(type: Settings.self, decoder: decoder) .retry(3) .eraseToAnyPublisher() } 이것은 우리는 네트워크 호출을 구현하기 위해 Combine 프레임워크를 사용하여 발..
Discover Concurrency (3) - Async/await을 사용할 때 메모리 관리하기 비동기 코드 컨텍스트에서 앱의 메모리를 관리하는 것은 까다로운 작업이다. 비동기 호출이 수행되고 처리되기 위해 다양한 객체와 값이 시간이 지남에 따라 캡처되고 유지되어야 할 수 있기 때문이다. 비교적 최신 기술인 async/await 구문은 많은 종류의 비동기 작업을 더 쉽게 작성할 수 있게 해 주지만, 비동기 코드에 관련된 다양한 작업과 객체의 메모리를 관리할 때는 여전히 신중해야 한다. Implicit captures async/await 과 이를 동기 컨텍스트에서 호출하기 위하여 Task 로 래핑 하는 것의 흥미로운 점은 비동기 코드가 실행되었을 때, 어떻게 객체와 값들이 암시적으로 캡처되는 경우가 많다는 것이다. 예를 들어, DocumentViewController 에서 작업을 하고 있다고 해보자..
Discover Concurrency (2) - Asynchronous Task 지연시키기 다양한 비동기 작업에 딜레이를 추가하고 싶을 수 있다. 예를 들어, 다른 작업이 먼저 완료되기를 기다리거나 “debouncing” 작업을 추가하기 위한 것이다. Swift에서는 특정 시간 지연을 가진 Task를 직접 실행하는 내장 방법은 제공하지 않고 있지만, 특정 나노 초만큼 Task를 대기하도록 지시함으로써 이러한 동작을 구현할 수 있다. Task { // Delay the task by 1 second: try await Task.sleep(nanoseconds: 1_000_000_000) // Perform our operation ... } Task.sleep 은 다른 코드와 관련해 완전히 차단되지 않기 때문에 다른 sleep 메서드와는 다르다. 위 Task.sleep 에 try 키워드가 붙은 ..
Discover Concurrency (1) - Task는 Swift Concurrency system내에서 어떤 역할을 할까? 개인적으로 WWDC 2022 - Eliminate data races using Swift Concurrency 에서 기본적인 Concurrency의 개념을 학습하고 나서 이 글을 읽으니 훨씬 이해하기 편했습니다. 아직 안 보셨다면 먼저 보시는 걸 추천드립니다! https://kswift.tistory.com/25 WWDC 2022 - Eliminate data races using Swift Concurrency 이번 세션의 주제는 data race 문제를 발생시키지 않고 효율적인 동시성 프로그램을 구성하는 전체론적인 Swift Concurrency의 관점을 확인할 것이다. 시작에 앞서 진행자는 concurrency를 바다에 비유한 kswift.tistory.com 스위프트의 concurrency 시스..
WWDC 2022 - Eliminate data races using Swift Concurrency 정리하기 Concurrency - 바다 Task - 보트 보트(Task)간 통신엔 Sendable 프로토콜을 준수하는 타입만 가능하다. Sendable Sendable은 말 그대로 보낼수 있는 상태를 의미함 → data race를 발생시키지 않고 안전하게 공유할 수 있는 데이터 타입 -> Struct, Enum 과 같은 값타입들을 포함하는 것들 참조타입(Class)은 제한된 경우(final class가 immutable storage만을 가진 상황) 를 제외하곤 Sendable일 수 없다. - 이를 무시하기 위해서 @unchecked Sendable을 사용할 수 있다. 물론 문제에 대한 책임또한 생긴다. Task 클로저 내부엔 Sendable이 명시되어 있기 때문에 새로운 클로저를 생성할 때 이전 컨텍스트에서 무..