Combine(1)-WhatisCombine(publish&subscirbe)
·
반응형프로그래밍
CombineCombine은 Apple이 iOS 13에서 도입한 반응형 프로그래밍 프레임워크로, 데이터 흐름과 변화 전파에 중점을 둔 선언적 API를 제공합니다. 비동기 이벤트 처리 자체가 목적이 아닌, 비동기 코드를 선언적으로 접근하여 가독성과 유지보수성을 극대화하는 것이 핵심입니다.반응형프로그래밍이란?데이터 흐름과 변화의 전파에 중점을 둔 프로그래밍 패러다임비동기처리에 X비동기코드의 선언적 접근 O코드 간소화 O🔑 핵심: Combine은 비동기 이벤트를 처리하기 위한 도구가 아니라, 비동기 코드를 선언적으로 접근하여 코드의 가독성과 유지보수성을 향상시키는 프레임워크입니다.기존 RxSwift가 서드파티 라이브러리로서 별도의 프로젝트 설정이 필요했다면, Combine은 Apple 생태계에 완전히 통합된..
lazy var
·
면접준비
Lazy var 그게 몬데? 그냥 private var 이나 쓰면 되지 굳이 이런걸 왜써? 이렇게 생각하면 안댐 직독직해 게으른 변수는 매우 swift에서 메모리적으로 효율적이게 도와준다. 처음 사용되기전까지 연산이 되지 않기에!! 그럼 두번째부턴? 뭐가효율적? 이 그림하나로 lazy var를 어떻게 쓰는지는 완벽하게 설명이된다. computed Property랑 뭐가 다를까? 바로 처음 사용될때 메모리에 올리고 그 후부터는 그냥 메모리에 올라온값사용! 연산프로퍼티는 사용할때마다 연산을 한다 장점 - 뷰 로드될때 모든 인스턴스를 올린다면 메모리 과부하를 막을수 있다 와 그렇다면? 그냥 모든 규모 큰 변수들을 lazy 처리하게 된다면 앱의 안정성과 효율성은 짱짱 좋아지는 거 아냐? 당연히 ㄴㄴ~! - 여러..
디스패치 그룹
·
면접준비
iOS 개발에서 비동기 작업을 그룹화하고 실행을 제어하는 방법은 매우 중요하다. 여러 개의 비동기 작업이 동시에 실행될 때 작업이 언제 끝나는지 감지하고 후속 작업을 실행해야 하는 경우가 많다. 이때 DispatchGroup과 DispatchSemaphore가 유용하게 쓰인다.1. DispatchGroup(1) DispatchGroup이란?DispatchGroup을 사용하면 여러 개의 비동기 작업을 그룹화하여 해당 그룹의 모든 작업이 끝났을 때 특정 코드를 실행할 수 있다.이것을 활용하면 예를 들어 런치스크린 이후 첫 화면을 로딩할 때, 모든 필수 리소스(이미지, 데이터)를 다 받은 후 UI를 업데이트할 수 있다그룹1의 작업이 여러쓰레드에서 작업을 해도 묶여있고 마지막 task가 끝나는 시점을 알 수 있..
GCD queue.
·
면접준비
아이폰에는 여러개의 쓰레드가 있다.  왜 버벅이냐? 일하는 녀석이 여러개가 있어도 한놈한테 야 너 다해! 이러면 아 할게 너무많아....하면서 과도한 작업이 몰려 버벅인다.특히나 메인쓰레드는 UI 업데이트와 사용자 이벤트 처리 등의 핵심 작업 수행하는 쓰레드로 블락되면 사용자경험이 나빠진다.=> 다른 쓰레드로 작업을 분산하면 되겟다~ 매우 간단!(작업 분산처리)그러면 어떻게 분산할껀데 ? iOS에서는 Task를 대기행렬(큐)에만 보내면 된다. 그러면 알아서 OS가 한다.그러면 작업을 큐에만 보내면 되겟네? 내가 할 것은 오직 큐에만 보내자!!! 직접적으로 쓰레드 관리 X, 큐에 넣으면 알아서 작업을 분산처리. 쓰레드보다 더 높은 차원에서 일을 한다고 보면됨. 비동기적 대기행렬(큐)에는 두가지 있다. GC..
Actor🕴🏻
·
면접준비
- What is Data Race?두 스레드가 동기화 없이 동일한 객체에 접근하려 할때 ⇒ Data race이벤트 순서가 프로그램의 정확성에 영향을 미칠때 ⇒ Race Conditionex) Thread별 연산의 실행 순서에 따라 값이 달라질 수 있다! 고로 Data Race≠Race conditionclass MyDataManager { static let instance = MyDataManager() private init() {} var data: [String] = [] func getRandomData() -> String? { self.data.append(UUID().uuidString) print(Thread.current) r..
파괴되지 않은 건물 - pYthon
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/92344 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ?? 왤캐 쉬워? 하면서 풀었던 문제 1트 타입이1이라면 데미지니까 보드에서 디그리만큼 빼주고 아닐경우는 더해주고 보드를 전체적으로 돌아보면서 0보다 크다면 남아있는벽이므로 answer+=1해주었다. 그랫더니 결과는? 두구두구두구... def solution(board, skill): answer = 0 for type,r1,c1,r2,c2,degree in skill: if type == 1: ..
양궁대회- 22KAKAO Blind(python)
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. n의 제한이 10이기에 일단 나는 중복조합을 사용해도 된다고 생각을 하였다. 2. info를 보면 점수가 첫번째인덱스가 10이고 줄어드는 형식으로 되어있기에 temprion에도 만약 내가 맞춘 점수에 해당하는 인덱스에 1이 증가하도록 하였다. 그리고 나서 해당하는 temprion과 info를 비교하면서 만약 temprion이 크다면 라이언이 해당하는 점수를 얻고 아닌데 만약 Info[k]에만..
주차요금계산 - 22kakao blind recruitment - python
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제해석 fees에 순서대로기본시간, 기본요금, 추가시간당, 추가요금으로 나오고 records에는 몇시에 어떤차가 들어오거나 나갔는지의 기록이 있다. 먼저 레코드들의 정보를 쪼개서 cardict에 key값으로는 차번호가 value에는 시간과 in,out상태를 넣어주었다. 첫번째 for문을 다 돌게 되면 키값에 해당하는 모든 history가 value로 이차배열이 들어가게 된다. 그 후 문제에서 보..