-
[Github] Tuist Sponsor
스폰서 기능이 어떻게 이뤄져있는지 궁금해서, 그냥 한번 해봤습니다. 스폰했다고 자랑하라고 해서 블로그에 올립니다 😂 iOS에는 Tuist라는 Native 앱 개발을 간소화하고 확장하여 생산적이고 지속 가능한 개발 환경을 조성하기 위해 Apple의 기본 툴체인을 개선시켜주는 앱이 있습니다. 너무 잘 사용하고 있어서 타겟을 이곳으로 정했습니다 ☺️ 축포와 함께 옥토켓이 저를 반겨줍니다.
2024.10.10 18:05 -
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처
SwiftUI를 위한 클린 아키텍처에 대한 고찰팀 프로젝트를 준비하며, SwiftUI에서의 클린 아키텍처에 대해 고민하게 되었습니다. SwiftUI 관련 아키텍처를 검색하던 중 가장 먼저 눈에 띈 아티클이 바로 "SwiftUI Clean Architecture"였습니다. 다행히도 이 아티클은 한국어 번역본도 제공하고 있어, SwiftUI의 클린 아키텍처에 대해 조금 더 깊이 이해할 수 있는 좋은 기회가 될 것 같아 천천히 읽어보았습니다. 이번 글에서는 아티클의 주요 내용을 요약하고, 제 개인적인 생각도 함께 나눠보고자 합니다. 아래 링크는 해당 아티클의 한국어 번역본 링크입니다.SwiftUI를 위한 클린 아키텍처들어가기에 앞서gon125.github.ioUIKit과 SwiftUI, 그리고 아키텍처 패턴의..
2024.09.07 07:32 -
[Framework] PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self) 터짐 현상이 에러에서 VC가 문제인지. coordinator패턴이 문제인지. 계속 삽질하다가 찾아냈습니다. 🥲iOS 17 버전에서 오류라고 합니다.16버전에서는 그냥 import로 된다고...*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PHPhotoLibrary presentLimitedLibraryPickerFromViewController:]: unrecognized selector sent to instance 0x10300fc60' 에러 해결 방법. Targets > Ge..
2024.09.02 04:59 -
[Clean Architecture] Presentation(MVVM), Domain, Data
Clean Architecture and MVVM iOS에서 가장 유명한 Clean Layered Architecture and MVVM 클린 아키텍쳐에 대해서 얘기해 보려고 합니다. 여태까지 UIKit으로 진행한 프로젝트들은 거의 MVVM으로 진행 했었고 나름 이정도면 MVVM에 대해서 잘 알고 있다고 생각했었는데요. 그냥 우물안의 개구리였을 뿐이라는 것을 깨달았습니다. 여태까지 한 프로젝트들은 Presentation의 MVVM 까지 구현하고 VM에서 Business 로직을 실행하고 있었습니다. 도메인과 데이터는 Clean Layered가 아닌 그냥 제가 편한대로 구현하고 있었는데요. 이번에 개인 프로젝트를 진행하면서 정리를 해볼겸, 설명을 좀 쉽게 해서 이해해볼 겸 작성합니다.iOS 개발자라..
2024.08.30 18:38 -
[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유
https://github.com/chanheki/swifty-proteins/가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다. 모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.비교 요약특성모듈화모놀리식독립성높은 독립성, 모듈별로 독립적인 테스트 가능낮은 독립성, 모든 코드가 하나의 코드베이스에 있음재사용성높은 재사용성, 모듈별로 재사용 가능한 테스트낮은 재사용성, 코드베이스 전체에 적용되는 테스트설정 및 관리 복잡성높은 설정 및 관리 복잡성낮은 설정 및 관리 복잡성의존성 ..
2024.05.25 00:01
-
[Github] Tuist Sponsor
스폰서 기능이 어떻게 이뤄져있는지 궁금해서, 그냥 한번 해봤습니다. 스폰했다고 자랑하라고 해서 블로그에 올립니다 😂 iOS에는 Tuist라는 Native 앱 개발을 간소화하고 확장하여 생산적이고 지속 가능한 개발 환경을 조성하기 위해 Apple의 기본 툴체인을 개선시켜주는 앱이 있습니다. 너무 잘 사용하고 있어서 타겟을 이곳으로 정했습니다 ☺️ 축포와 함께 옥토켓이 저를 반겨줍니다.
-
16235 c++ - 나무 재테크
나무는 (x, y)라고 해놓고선 r,c로 들어왔다. 문제가 날 속임. (그래서 틀림...ㅠㅠ)결국 맞췄을땐 vector로하면 시간초과가 난다는 것을 알게 되었다. 처음에 문제 잘 읽고 시간 제한 보긴했지만 구현 문제라서 그냥 주어진 상황대로 풀었다. 둘을 비교했을때, 나무의 수가 커지면 커질수록 더 차이가 난다.# Let's calculate the complexity of both versions of the code to compare their potential performance.# Old Version (using vector):# In the old version, we have:# - Spring: Sorting the entire vector by age each spring, which..
-
[C++] 순열, 조합
표준 라이브러리로는 next_permutaion 과 prev_permutaion 이 있습니다.next_permutaion : "오름차순의 배열"을 기반prev_permutaion : "내림차순의 배열"을 기반#include using namespace std;template void pa(t T) { for (auto p : T) cout v = {1, 2, 3}; cout dfs로 전체 순열 뽑아내려면,#include using namespace std;void dfs(int n, vector a, vector v) { if (a.size() == n) { for (auto p : a) cout > n; vector a; vector visited(n + 1, false); dfs(..
-
1299 c++ - 전쟁-탈출편2
다익스트라 정리 다익스트라 풀이처음에 다익스트라로 n까지 최단 거리 구함. (구하면서 prev에 간선 정보들을 저장)prev를 이용하여 graph에서 해당하는 간선들을 삭제.다시 다익스트라를 돌려서 n까지 가는 최단 거리를 구함.고려한 점도시는 양방향으로 이동할 수 있다. (최단거리라면 양방향 둘 다 막힌다)다른 도시로 이동할 때 코스트가 다른 도로가 존재할 수 있다 ( 1->2 (1), 1->2 (2)) 이때 cost 가 1인 도로만 막힘탈출하지 못하는 경우는 없다.정답 코드더보기#include using namespace std;#define INF 1e9void dijkstra(int n, vector>>& graph, vector& distance, vector& prev..
-
1446 swift / c++ - 지름길
다이나믹프로그래밍과 다익스트라 두 방법 모두 사용할 수 있습니다. 시간 복잡도시간 복잡도는 O(D + N)입니다.D는 고속도로의 길이, N은 지름길의 수입니다.문제에서 N ≤ 12, D ≤ 10,000이므로, 이 접근 방식은 충분히 효율적입니다. C++ DP 풀이.#include using namespace std;#define INF 1e9int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, d; cin >> n >> d; vector> graph[10001]; for (int i = 0; i > from >> to >> cost; if (to dist(d + 1, INF); dist[0] = 0; for (int ..
-
[그래프] 다익스트라 / Dijkstra's algorithm
다익스트라 알고리즘 / Dijkstra's algorithm다익스트라 알고리즘은 단일 출발점 최단 경로를 찾는 알고리즘입니다. 가중치가 음수가 아닌 그래프에서 출발점에서 모든 다른 정점까지의 최단 경로를 구할 때 사용됩니다. 다익스트라 알고리즘은 우선순위 큐(Priority Queue)를 이용해 최단 거리가 가장 작은 정점을 빠르게 탐색하여 최적화된 성능을 제공합니다.다익스트라 알고리즘의 특징음의 가중치 간선 허용 안 함: 음의 가중치가 있는 그래프에서는 올바르게 작동하지 않습니다.우선순위 큐 사용: 최단 경로를 더 효율적으로 찾기 위해, 가중치가 가장 작은 정점을 빠르게 선택하기 위해 우선순위 큐(최소 힙)을 사용합니다.시간 복잡도: O((V + E) * log V) - 여기서 V는 정점의 수, E는 ..
-
[누적합] 세그먼트트리 / Segment tree
세그먼트 트리에 대해서 알아보고 해당하는 자료구조에 대해서 코드로 어떻게 사용하는지에 대해서 정리하려고 작성하였습니다.https://book.acmicpc.net/ds/segment-tree자세한 설명은 위의 백준북에서 볼 수 있습니다. C++#include using namespace std;using ll = long long;ll init(vector &a, vector &tree, int node, int start, int end);ll sum(vector &tree, int node, int start, int end, int left, int right);void update(vector &tree, int node, int start, int end, int index, ll diff);..
-
18352 swift - 특정 거리의 도시 찾기
처음 접근 - 벨만 포드 벨만 포드 풀이 시간초과 코드 보기.더보기이유. O(V * E) 벨만-포드 알고리즘의 시간 복잡도는 **O(V * E)**입니다. 여기서 V는 정점의 수, E는 간선의 수를 의미합니다.주어진 문제에서:N (정점의 수) = 최대 300,000M (간선의 수) = 최대 1,000,000따라서 벨만-포드를 사용했을 때 최악의 경우 시간 복잡도는:O(V×E)=O(300,000×1,000,000)=300,000,000,000O(V \times E) = O(300,000 \times 1,000,000) = 300,000,000,000O(V×E)=O(300,000×1,000,000)=300,000,000,000즉, 300조의 연산을 수행해야 합니다. import Foundation let I..
-
[그래프] 벨만-포드 / Bellman–Ford algorithm
Bellman–Ford algorithm 벨만-포드 알고리즘벨만-포드(Bellman-Ford) 알고리즘은 그래프에서 음의 가중치를 허용하면서 단일 출발점 최단 경로를 찾는 알고리즘입니다. 이 알고리즘은 다익스트라 알고리즘과는 달리 음의 사이클을 탐지할 수 있는 특성 때문에 특정 문제들(예: 네트워크에서 음의 가중치가 있는 경로 등)을 해결하는 데 유용합니다.벨만-포드 알고리즘의 특징시간 복잡도: O(V * E), 여기서 V는 정점의 개수, E는 간선의 개수입니다. 따라서, 다익스트라보다 느리지만 음의 가중치를 포함할 수 있다는 장점이 있습니다.음의 가중치: 음의 가중치를 허용합니다. 다익스트라와 달리, 음의 사이클이 있을 때도 탐지할 수 있습니다.음의 사이클 탐지: 벨만-포드는 그래프에 음의 사이클이 존..
-
[C++] vector
c++17을 기준으로 사용합니다.아래 레퍼런스를 참고하였습니다. C++17 - cppreference.comThe following features were merged into C++17: From the File System TS: the filesystem library. From the Library fundamentals v1 TS: features, including std::any, std::optional, std::string_view, std::apply, polymorphic allocators, searchers. From Libraryen.cppreference.com C++Clang++ 10.0 (C++17)clang++ -std=c++17 -O2 -Wno-unused-resul..
-
3190 swift / c++ - 뱀
뱀 게임 구현c++/* ************************************************************************** *//* *//* ::: ::: ::: *//* Problem Number: 3190 :+: :+: :+: *//* +:+ +:+ ..
-
12100 swift / c++ - 2048 (Easy)
문제 개요는 2048게임을 구현하는 것.입력첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2보다 크거나 같고, 1024보다 작거나 같은 2의 제곱꼴이다. 블록은 적어도 하나 주어진다.출력최대 5번 이동시켜서 얻을 수 있는 가장 큰 블록을 출력한다. 접근 방법. 4방향으로 합치고, 미는 dfs의 방법을 통해. 5번 할 수 있는 모든 방법을 찾아낸 뒤. 최대값으로 출력. 더보기/* ************************************************************************** *//* ..
-
[Clean Architecture, SwiftUI] SwiftUI를 위한 클린 아키텍처
SwiftUI를 위한 클린 아키텍처에 대한 고찰팀 프로젝트를 준비하며, SwiftUI에서의 클린 아키텍처에 대해 고민하게 되었습니다. SwiftUI 관련 아키텍처를 검색하던 중 가장 먼저 눈에 띈 아티클이 바로 "SwiftUI Clean Architecture"였습니다. 다행히도 이 아티클은 한국어 번역본도 제공하고 있어, SwiftUI의 클린 아키텍처에 대해 조금 더 깊이 이해할 수 있는 좋은 기회가 될 것 같아 천천히 읽어보았습니다. 이번 글에서는 아티클의 주요 내용을 요약하고, 제 개인적인 생각도 함께 나눠보고자 합니다. 아래 링크는 해당 아티클의 한국어 번역본 링크입니다.SwiftUI를 위한 클린 아키텍처들어가기에 앞서gon125.github.ioUIKit과 SwiftUI, 그리고 아키텍처 패턴의..
-
[Framework] PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self) 터짐 현상이 에러에서 VC가 문제인지. coordinator패턴이 문제인지. 계속 삽질하다가 찾아냈습니다. 🥲iOS 17 버전에서 오류라고 합니다.16버전에서는 그냥 import로 된다고...*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PHPhotoLibrary presentLimitedLibraryPickerFromViewController:]: unrecognized selector sent to instance 0x10300fc60' 에러 해결 방법. Targets > Ge..
-
[Clean Architecture] Presentation(MVVM), Domain, Data
Clean Architecture and MVVM iOS에서 가장 유명한 Clean Layered Architecture and MVVM 클린 아키텍쳐에 대해서 얘기해 보려고 합니다. 여태까지 UIKit으로 진행한 프로젝트들은 거의 MVVM으로 진행 했었고 나름 이정도면 MVVM에 대해서 잘 알고 있다고 생각했었는데요. 그냥 우물안의 개구리였을 뿐이라는 것을 깨달았습니다. 여태까지 한 프로젝트들은 Presentation의 MVVM 까지 구현하고 VM에서 Business 로직을 실행하고 있었습니다. 도메인과 데이터는 Clean Layered가 아닌 그냥 제가 편한대로 구현하고 있었는데요. 이번에 개인 프로젝트를 진행하면서 정리를 해볼겸, 설명을 좀 쉽게 해서 이해해볼 겸 작성합니다.iOS 개발자라..
-
[C++] Permutation, Combination
#include #include #define n 4#define r 2using namespace std;vector pArr(r, 0);vector check(n + 1, false);void printArray(vector arr) { for (int i = 0; i #include #include #define n 4#define r 2using namespace std;vector pArr(r, 0);void printArray(vector arr) { for (int i = 0; i #include #include #define n 4#define r 3using namespace std;vector cArr(r, 0);void printArray(vector arr) { for (i..
-
[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유
https://github.com/chanheki/swifty-proteins/가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다. 모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.비교 요약특성모듈화모놀리식독립성높은 독립성, 모듈별로 독립적인 테스트 가능낮은 독립성, 모든 코드가 하나의 코드베이스에 있음재사용성높은 재사용성, 모듈별로 재사용 가능한 테스트낮은 재사용성, 코드베이스 전체에 적용되는 테스트설정 및 관리 복잡성높은 설정 및 관리 복잡성낮은 설정 및 관리 복잡성의존성 ..
-
[Architecture] Matching MVVM architecture in a modular architecture
Cocoa-MVC에 이어 MVVM 아키텍쳐 적용 방식에 대한 정리입니다. [Architecture] Matching Cocoa-MVC architecture in a modular architecturehttps://github.com/chanheki/swifty-proteins현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.레이어별로 모듈화를chanhhh.tistory.com MVVM을 Modular architecture에 적용시 어떤 부분이 어떤 layer에 들어가는지 정리하기 위해서 작성한 글입니다.모듈러 아키텍처 설계App Layer앱의 진입점 및 전체적인 앱 라이프사이클 관..
-
[Architecture] Matching Cocoa-MVC architecture in a modular architecture
https://github.com/chanheki/swifty-proteins현재는 pirvate 이지만 완성 후 public으로 공개 예정 레포지토리입니다.위 프로젝트에서 Modular architecture를 적용하여 설계, 구현하고 있습니다.레이어별로 모듈화를 나누고 Cocoa-MVC 패턴을 적용하기 위해 정리한 내용입니다. 모듈러 아키텍처 설계App Layer앱의 진입점 및 전체적인 앱 라이프사이클 관리주요 앱 설정 및 초기화 코드Feature Layer사용자 인터페이스 및 사용자의 액션을 처리뷰(View) 및 뷰와 관련된 로직각 기능별로 독립적인 UI 및 로직 (AuthFeature, ProfileFeature 등)Domain Layer비즈니스 로직과 애플리케이션의 도메인 모델엔터티, 유스케이스..
-
[iOS, macOS layer] libSystem / CFNetwork / URLSession / 네트워크로 보는 Core OS, Core Services
Cocoa Fundamentals를 정독하던 도중 CoresOS와 CoreFoundation에 대한 궁금증이 생겨서 사용해보고 이해를 돕기위해 이 글을 작성합니다. 아래 링크는 해당 내용을 번역, 알아보기 쉽게 작성한 블로그 글입니다. [MacOS, iOS] Cocoa Fundamentals Guide / 코코아 기본 사항 chanhhh.tistory.com Cocoa framework의 계층은 위와같이 나뉠 수 있습니다.그 중 Core OS 레벨에는 커널, 파일 시스템, 네트워킹 인프라, 보안, 전원 관리 및 여러 장치 드라이버가 포함되어 있습니다. 또한 POSIX/BSD 4.4/C99 API 사양을 지원하고 많은 서비스에 대한 시스템 수준 API를 포함하는 libSystem 라이브러리도 있습니다.l..
-
[Objective-C] 런타임에서 동작하는 과정.
Objective-C는 동적 언어의 특성을 가지고 있어 런타임 시에 많은 동작들이 수행됩니다. 이러한 동적 특성은 런타임 시 객체의 타입을 확인하거나 변경할 수 있게 하며, 메소드를 동적으로 호출하거나 교체하는 것도 가능하게 합니다.Objective-C의 런타임 시스템은 아래와 같은 과정을 거치게됩니다.1. 클래스와 객체의 동적 생성Objective-C에서는 런타임 시 클래스를 생성하고 수정할 수 있습니다. 예를 들어, `NSClassFromString()` 함수를 사용하여 문자열 이름으로 클래스의 인스턴스를 생성할 수 있습니다. 또한, 클래스에 새로운 메소드를 추가하거나 기존 메소드를 교체하는 것도 가능합니다.2. 메소드 호출의 동적 결정Objective-C 메소드 호출은 컴파일 타임이 아닌 런타임에 ..
-
[MacOS, iOS] Cocoa Fundamentals Guide / 코코아 기본 사항
코코아란 무엇인가요?Cocoa는 OS X 운영 체제와 iOS를 위한 애플리케이션 환경입니다.iOS는 iPhone, iPad, iPod touch와 같은 멀티터치 기기에서 사용되는 운영 체제를 뜻합니다.객체 지향 소프트웨어 라이브러리, 런타임 시스템 및 통합 개발 환경으로 구성되어 있습니다.이 글에서는 이 정의를 확장하여 두 플랫폼에서 Cocoa의 목적, 기능 및 구성 요소에 대해 설명합니다.Cocoa 환경Cocoa는 OS X 및 iOS에서 실행되는 애플리케이션을 위한 런타임 환경을 제공하는 객체 지향 프레임워크의 집합입니다. Cocoa는 OS X을 위한 탁월한 응용 프로그램 환경이며 iOS를 위한 유일한 응용 프로그램 환경입니다. (Carbon은 OS X의 대체 환경이지만 기존 OS X 코드 기반을 지..
-
6603 swift - 로또
어떻게든 조합으로 풀어보려고 노력.조합은 여기 [Swift] 순열 / permutation / 조합 / combinationfunc permutation(_ target: [String], _ targetNum: Int) { var result: [[String]] = [] var check = [Bool](repeating: false, count: target.count) func permute(_ arr: [String]) { if arr.count == targetNum { result.append(arr) return } for i in 0..chanhhh.tistory.com문제 개요는 이것.7 1 2 3 4 5 6 78 1 2 3 5 8 13 21 340input의 첫번째 숫자만큼 수가 주어..
-
[MySQL] 기본 SELECT
재구매가 일어난 상품과 회원 리스트 구하기ONLINE_SALE 테이블에서 USER_ID와 PRODUCT_ID만 뽑아내는데, USER_ID와 PRODUCT_ID를 그룹화 시켜서 2개 이상 중복되는 경우에 SELECT 할 때USER_ID를 오름차순으로 정렬, PRODUCT_ID를 내림차순으로 정렬 시키는 QuerySELECT USER_ID, PRODUCT_ID FROM ONLINE_SALEGROUP BY USER_ID, PRODUCT_ID HAVING COUNT(*) > 1ORDER BY USER_ID ASC, PRODUCT_ID DESC; https://school.programmers.co.kr/learn/courses/30/lessons/131536 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포..
-
[Swift] 순열 / permutation / 조합 / combination
func permutation(_ target: [String], _ targetNum: Int) { var result: [[String]] = [] var check = [Bool](repeating: false, count: target.count) func permute(_ arr: [String]) { if arr.count == targetNum { result.append(arr) return } for i in 0.. 위의 코드는 메모리초과가 날 위험이 있다. let arr = ["1", "2", "3", "4"]let n = arr.countvar..
-
[Swift] @_exported
@_exported import 키워드는 Swift에서 내부 모듈에서 사용된 외부 모듈을, 해당 내부 모듈을 사용하는 다른 모듈에서 별도의 import 없이 사용할 수 있게 해주는 기능입니다. 이는 모듈 간의 의존성을 관리할 때 편리함을 제공하지만, Swift 공식 문서에는 아직 내부적인 사용(_로 시작)을 의미하는 비공개 API로 분류되어 있으며, 향후 변경될 가능성이 있습니다. 사용 이유 간결성: 상위 모듈에서 하위 모듈의 기능이나 타입을 사용할 때, 모든 곳에 동일한 import 구문을 반복해서 작성할 필요가 없어 코드가 더 간결해집니다. 편의성: 특정 라이브러리나 프레임워크를 내부적으로 사용하는 모듈을 만들 때, 이 모듈을 사용하는 사용자가 내부적으로 사용된 라이브러리나 프레임워크에 대해 알 필요..
-
[Architecture] Modular Architecture / MFA에서 추상레이어의 Export
Swift의 modular architecture / Micro Feature Architecture(MFA)에서 Feature, Domain, Core, Shared의 레이어를 추상적으로 나누고 해당하는 레이어에 맞춰서 코드를 관리할 때 Export를 통하여 제어합니다. 이 글에서는 Core 레이어를 통하여 예시를 들고있습니다. CoreExport.swift 파일을 사용하여 다른 모듈에서 CoreNetwork 및 CoreNetworkInterface 모듈을 임포트할 수 있도록 설정하는 것은 모듈 간의 의존성 관리 및 코드 재사용성을 높이기 위한 전략 중 하나입니다. 이러한 접근 방식은 특히 대규모 프로젝트나 여러 모듈이 상호작용하는 복잡한 시스템에서 유용합니다. CoreExport.swift의 목적 간..
-
[Tuist] Version 4 / config / package / dependencies
Tuist config 설정. 공식문서의 개요를 보시면 " Tuist는 공유 Config.swift 매니페스트를 통해 구성할 수 있습니다. 튜이스트가 실행되면 디렉토리를 탐색하여 Config.swift 파일이 포함된 튜이스트 디렉토리를 찾습니다. 구성 매니페스트 정의는 필수는 아니지만 저장소의 일부인 모든 프로젝트에서 일관된 동작을 보장하기 위해 권장됩니다. " 라고 적혀있습니다. 이 뜻은 config가 없어도 되지만 일관된 동작을 보장하려면 config를 작성하라고 권장하고 있습니다. ProjectDescription 확인해서 해당 하는 인스턴스들이 어떤 역할을 하는지 간단하게 살펴보았습니다. /// - Parameters: /// - compatibleXcodeVersions: List of Xcod..
-
[Tuist] Version 4 / UIKit / AppDelegate / SceneDelegate
Tuist init UIKit without Storyboard with version 4 tuist init --platform ios tuist init --platform ios 4.8.0 버전에서는 default가 SwiftUI로 되어있으므로, 이를 UIKit으로 진행하기 위해 아래와 같은 프로세스를 따릅니다. Tuist init 이후 AppDelegate로 진행하는 경우 UIKit without Storyboard로 전환하는 방법은 간단합니다. 그냥 소스를 지워주시고 아래와 같이 앱델리게이트를 채택해 만들어 주시기만 하면 됩니다. AppDelegate.swift import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { ..
-
[Tuist] Version 4 / init / edit / generate / 초기설정 / 수정 / 실행
협업을 하는 iOS 개발자라면 무조건 써야하는 Tuist 입니다. 비슷한 툴로는 XCodegen이라는 프로그램도 있지만 YAML 파일을 사용하여 프로젝트의 구조와 설정을 정의하기 때문에, 러닝커브가 존재해서 Tuist를 사용합니다. 또한 Tuist는 프로젝트 생성, 의존성 관리, 프로젝트 간 의존성, 그리고 마이크로 프레임워크 아키텍처 지원 등 프로젝트 관리의 여러 측면을 지원하기 때문에, Tuist를 사용합니다. Tuist 란 XCode 모듈관리, 협업 관리를 위하여 쓰는 Third party program입니다. 저는 Tuist 3.36.2 버전을 사용해 왔는데, 이번에 Tuist가 breaking point를 가짐으로써 메이저 버전이 4로 올라갔기 때문에, Tuist 4를 학습 + 실습 해보려고 합..
-
[instruments.app] Debugging / C / C++ / Program
글 작성 기준 버전 15.2 이 글은 instruments.app 앱으로 간단하게 테스트 프로그램의 Leaks check 및 트러블 슈팅에 대해서 다룬다. instruments.app 을 실행하자. Leaks 외에도 여러가지를 테스트 해볼 수 있다. C에서 주로 사용하게 될것은 Leaks혹은 Allocations 정도. Target 을 내가 뽑아낸 프로그램으로 지정해줘야 한다. choose Target 선택해서 프로그램 선택. (참고 : clang으로 컴파일했다.) 꿀팁 > Command + Shift + G 누르면 경로를 적어서 이동가능 하다. Trouble shooting 1. Failed to gain authorization Failed to gain authorization 에러가 뜨는 경우 아..
-
[Swift / 이코테] DP 개미전사
문제: 개미전사난이도중풀이 시간30분시간 제한1초메모리 제한128MBA. 문제개미 전사는 메뚜기 마을의 식량창고를 몰래 공격한다.메뚜기 마을의 식량창고는 일직선으로 되어 있다.각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다.메뚜기 정찰병은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식량창고가 공격받으면 알아챌 수 있다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량창고를 약탈해야 한다.개미 전사는 식량창고 N에 대한 정보가 주어졌을 때 얻을 수 있는 식량의 최댓값을 구하는 프로그램을 작성하라.식량창고 4개가 아래와 같이 존재한다고 가정한다.[1, 3, 1, 5]이때 개미 전..
-
[Swift] Tail Call Optimization / TCO / 꼬리재귀
꼬리 재귀 최적화란? 꼬리 재귀 최적화는 컴파일러가 꼬리 호출(tail call), 즉 함수의 마지막 동작이 함수 호출인 경우, 새로운 스택 프레임을 생성하는 대신 현재의 스택 프레임을 재사용하여 함수를 호출하는 최적화 기법이다. 이 최적화를 통해 함수 호출에 따른 오버헤드를 줄이고, 스택 오버플로우의 위험을 감소시킨다. func sumPrefix(_ n: Int, _ acc: Int) -> Int { if n == 0 { return acc } return sumPrefix(n - 1, acc + n) } print(sumPrefix(1000000, 0)) 해당 재귀를 부르면 어떻게 될까 ? - 대부분의 정답은 어느정도 depth를 들어가다가 한계를 맞이하고 segmentfault를 띄울 것 이다. 라..
-
[Swift] Metadata
메타데이터(Metadata or Metainformation)는 데이터(data)에 대한 데이터. 보통은 다른 데이터의 내용, 특성, 품질, 조건 등을 설명하는 정보입니다. 이렇게 흔히들 간단히 정의하지만, 캐런 코일(Karen Coyle)에 의하면 '어떤 목적을 가지고 만들어진 데이터(constructed data with a purpose)'라고도 정의한다. 즉, 다른 데이터를 정의하고 기술하는 데이터(data that defines and describes other data)입니다. 예를 들어, 디지털 이미지 파일의 메타데이터에는 촬영 날짜, 사용된 카메라의 모델, 이미지의 해상도 등의 정보가 포함될 수 있습니다. HTML 문서에서 메타데이터는 태그를 사용하여 문서의 인코딩, 저자, 설명, 키워..
-
[Swift 이코테] DP / Dynamic Programming / 동적 계획법 /
이전에 정리해둔 글이 있지만 이코테 책을 읽고 다시 정리합니다. [종만북] Dynamic Programming / DP / 동적 계획법 Algorithmic Problem Solving Strategies 개인적으로 읽고 정리한 요약입니다. 아래 링크에 문제 풀이 예제가 있습니다. GitHub - chanheki/AlgorithmicProblemSolvingStrategies: Algorithm Book Study Algorithm Book Study. Contribute t chanhhh.tistory.com 이책에서는 DP의 첫 분단의 제목을 [중복되는 연산을 줄이자]를 메인으로 설명하고 있다. 컴퓨터는 연산 속도에 한계가 있고, 메모리 공간을 사용할 수 있는 데이터의 개수도 한정적이라는 점이 많..
-
1946 swift - 신입 사원 / 시간 초과 해결
Greedy 사용 [Swift] Greedy / 그리디 / 탐욕 알고리즘 그리디 알고리즘이란? Greedy algorithm은 최적해를 구하는 데에 사용되는 근사적인 방법으로, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으 chanhhh.tistory.com 지원자의 서류심사 성적으로 sort하면 O(NlogN)으로 maxInterviewRank로 where절을 사용해서 아래와 같은 코드로 2NlogN의 시간을 가지고 문제를 풀 수 있지만, 아래의 코드는 백준의 Swift 의 느린 입력으로 인해 시간초과를 받을 수 밖에 없다 let T = Int(readLine()!)! for _ in 0..= 48, now