전체 글 552

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation)

[Swift] Timer + RunLoop, backgroundQueue (swift-corelibs-foundation) 서비스 및 기능에 따라서 RunLoop.main에서 돌아가게 하면 안되는 케이스도 존재. 잘못 설계할 경우 Timer기반으로 동작하는 로그나 기능 등 예상치 못한 결과를 낼 수 있음. RunLoop.main에서 타이머가 아예 방출되지 않거나 RunLoop.main이 아닌 다른스레드에서 돌려야 하는 경우에 대하서 자세히 알아볼 예정 위 케이스들을 내부 구현 코드를 통해 근거 있게 정리해보고자 함. 글의순서 타이머 알아보기 swift-corelibs-foundation내에 Timer 구현 알아보기 Timer 선언부 Timer scheduledTimer 함수 RunLoop 간단히 알아보..

[Swift] NSCache (swift-corelibs-foundation)

[Swift] NSCache (swift-corelibs-foundation) NSCache 문서를 읽어보다가 `eviction`이란 단어를 보게 되었는데, 대학 수업을 원서로 배울때, `eviction`과 `expiration`에 대해서 깊게 탐구했던 생각이 났음.애플에서 최근에 Foundation 부분을 오픈소스로 공개했는데, NSCache와 관련해서 구현된 코드를 직접 확인하면서 제대로 이해해보고자 함. 글의 순서NSCache OverviewiOS에서 Cache 종류왜 메모리 캐시가 디스크 캐시보다 빠를까?캐시와 관련한 몇가지 정책 및 알고리즘Foundation에서 구현되어 있는 NSCache에 대해서 코드로 알아보기NSCache 선언부NSCache InsertNSCache removeNSCache..

[LeetCode] 11. Container With Most Water

[LeetCode] 11. Container With Most Water https://leetcode.com/problems/container-with-most-water/description/?envType=study-plan-v2&envId=leetcode-75  문제 풀이 접근법투포인터 활용투포인터 접근법은 가장 높은걸 기준으로 가장 멀리 있는것 부터 하나씩 체크해가는 로직왜냐하면 가장 멀리 있는 기둥일수록 가장 면적이 크게 잡히기 때문.면적을 계산한 후 두 기둥 중 더 높은 기둥을 기준 포인터로 남기고 기준 포인터에서 L, R을 옮겨가면서 판단하기이게 가능한 이유는 `거리`가 가중값 없이 존재하기 때문에 거리를 기반으로 L, R을 옮기면서 찾아보면 된다.만약 가중값이 존재한다면 그래프 알고리즘으..

코딩테스트 2024.10.09

[LeetCode] 334. Increasing Triplet Subsequence

[LeetCode] 334. Increasing Triplet Subsequencehttps://leetcode.com/problems/increasing-triplet-subsequence/?envType=study-plan-v2&envId=leetcode-75     문제 풀이 아이디어증가하는 K(3)개의 수를 찾는 문제로 일반화K개의 값이 증가하는 패턴을 찾기그리디 알고리즘으로 접근K개를 먼저 준비해두고, 0번 인덱스부터 값을 교체해가며 연속하는 배열을 찾아냄  class Solution { func increasingTriplet(_ nums: [Int]) -> Bool {// kLengthArray는 현재까지 발견한 k개의 증가하는 수열을 저장 var k = 3 v..

코딩테스트 2024.10.09

[LeetCode] 605. Can Place Flowers

[LeetCode] 605. Can Place Flowers  - DP 활용해 누적곱으로도 풀어낼 수 있는데, 특정 조건이 만족하면 그대로 종료할 수 있는 로직을 통해 특정 데이터 조건에서 시간 복잡도 개선이 불가하여, 다른아이디어 적용  문제 링크https://leetcode.com/problems/can-place-flowers/?envType=study-plan-v2&envId=leetcode-75  문제풀이아이디어, 나 자신을 제외한 모든 수를 곱하는 거라서, 이미 모든 수를 다 곱해놓고, 출력 전에 나 자신으로 나누기이 과정에서 특정 조건을 만족한 경우 엣지케이스를 통한 처리로 시간 복잡도 줄임 분석 및 주의점0이 2개 이상이면 모든 자리는 0이므로 전체 곱을 수행하는 도중에 0이 2개 이상이라..

코딩테스트 2024.10.09

[CI] 로컬 빌드 성공 하지만, Github Action 빌드 실패하던 문제

[CI] 로컬 빌드 성공 하지만, Github Action 빌드 실패하던 문제 문제 상황로컬에서 모든 작업자가 빌드가 잘 되지만,  Github Action에서만 빌드가 실패하는 문제가 발생Process completed with exit code 65.문제 분석에러 파일이 길어서 콘솔에는 나타나지 않아 에러 파일을 다운 받아 분석패키지 의존성에 문제가 있는지 점검테스트 코드 통과하지 못한 영역이 있는지 점검최근 작업한 영역에서 빌드에 영향을 줄 수 있는 부분이 있는지 점검당시 Translation 프레임워크를 도입 iOS 17, 18에서 지원하는 사용할 수 있는 API 가 다름 (18에서 확장됨)Xcode 15와 Xcode 16에 따라 iOS 타겟 범위가 다름 (15는 17버전, 16은 18버전 지..

티스토리 크롤링 포스팅 제목과 링크 추출 자동화 (Python)

티스토리 크롤링 포스팅 제목과 링크 추출 자동화 (Python) 깃헙에 그동안 블로그에 포스팅한 글들을 정리해두려고 함.근데 이걸 아래의 형태로 뽑아내고자 하는데, 하나하나 수동으로 옮기는거 매우 귀찮음.비공개 포스팅을 포함해 포스팅이 654개나 되기 때문! [{포스팅 제목}]({링크}) 하나하나 옮겼으면, 하루 종일 했을 것 같은데, 구조 분석해서 끝내기까지 20분도 걸리지 않았던 것 같음.앞으로 두고두고 쓸 것 같아서 포스팅.  작업 후기자동화를 통해 결과적으로 시간 단축하는건 좋았는데, 데이터를 변환하기 쉽게 바꿔주는 과정이 오래걸림.Swift 쓰다가 Python 쓰니까 에러가 불친절하게 느껴짐. 조금 더 구체적이었으면 좋겠음.Python 정말 쉬움. 목적에 따라 다르겠지만, 이만한 언어가 없는거 ..

AI 및 자동화 2024.10.01

We do not provide support for this pre-release version.

We do not provide support for this pre-release version. Issue with `tuist graph` after updating to macOS After upgrading to macOS 15, I encountered the following error when running the tuist graph command ProblemThe 'brew' command exited with error code 1 and message:Warning: You are using macOS 15.We do not provide support for this pre-release version.It is expected behaviour that some formulae..

SwiftUI로 Placeholder가 존재하는 TextField 설계 팁 (UIKit호환)

SwiftUI로 Placeholder가 존재하는 TextField 설계 팁 (UIKit호환) 최근에는 SwiftUI와 UIKit을 정말 많이 혼용해서 사용하고 있음.특히 몇몇 컴포넌트들은 SwiftUI로 작성한 것들을 UIKit에서 가져다가 사용하는 컴포넌트들이 많은데, 서로 손쉽게 사용할 수 있도록 설계.  글의 순서구현 결과 스크린샷구현 예시 코드SwiftUI UsageUIKit Usage 구현 결과 스크린샷  구현 예시 코드구현 포인트 @State, @Binding을 외부에 직접 노출시키는 것이 아닌 Delegate를 통해 이벤트를 전달함.장점: UIKit에서 공통된 코드 규칙으로 편리하게 사용할 수 있음.  import SwiftUI/// 리스트에서 사용하는 검색 필드struct Search..

Dependency Container 만들기

Dependency Container 만들기 의존성 주입해줘야 하는데, 매번 의존성 주입을 위해 반복되는 작업을 하는게 불편함.SwiftUI에서 @EnvironmentOjbect를 활용한 처음 작성한 코드를 새롭게 바꿔보고자 함. 글의 순서environmentObjcet를 활용한 초기 개발주입할 것들을 구조체로 분리하여 정의주입할 객체 생성하기UI구성하는 Builder에 주입하기 environmentObjcet를 활용한 초기 개발 모듈화 전 해당 부분을 처리할 때 SwiftUI에 environmentObject를 활용하고자 함.사유: App Root 영역에서 container를 작성해두면 모든 하위 뷰에서 사용할 수 있기 때문개선하기로 한 이유UIKit과 혼용해서 사용할 때 보라색 이슈가 발생하며,..