-
[Architecture] 프로젝트에 Modular Architecture를 적용하는 이유
https://github.com/chanheki/swifty-proteins/가장 큰 이유는 프로젝트에 모듈화를 적용해보고 싶었습니다.기존에 있던 프로젝트에 모듈화를 해보는 것도 좋겠지만, 그렇게 하는게 더 접근이 더 어려울것 같아서 처음부터 모듈화된 프로젝트를 만들어서 개발해보고 싶었습니다. 모듈화의 큰 장점인 수평적 확장이 가능하다는 점과 단위 테스트의 용이성을 경험해보고 싶어서 개발 방향을 잡았습니다.비교 요약특성모듈화모놀리식독립성높은 독립성, 모듈별로 독립적인 테스트 가능낮은 독립성, 모든 코드가 하나의 코드베이스에 있음재사용성높은 재사용성, 모듈별로 재사용 가능한 테스트낮은 재사용성, 코드베이스 전체에 적용되는 테스트설정 및 관리 복잡성높은 설정 및 관리 복잡성낮은 설정 및 관리 복잡성의존성 ..
2024.05.25 00:01 -
[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앱의 진입점 및 전체적인 앱 라이프사이클 관..
2024.05.23 12:12 -
[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비즈니스 로직과 애플리케이션의 도메인 모델엔터티, 유스케이스..
2024.05.22 10:59 -
[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..
2024.05.04 04:15 -
[Objective-C] 런타임에서 동작하는 과정.
Objective-C는 동적 언어의 특성을 가지고 있어 런타임 시에 많은 동작들이 수행됩니다. 이러한 동적 특성은 런타임 시 객체의 타입을 확인하거나 변경할 수 있게 하며, 메소드를 동적으로 호출하거나 교체하는 것도 가능하게 합니다.Objective-C의 런타임 시스템은 아래와 같은 과정을 거치게됩니다.1. 클래스와 객체의 동적 생성Objective-C에서는 런타임 시 클래스를 생성하고 수정할 수 있습니다. 예를 들어, `NSClassFromString()` 함수를 사용하여 문자열 이름으로 클래스의 인스턴스를 생성할 수 있습니다. 또한, 클래스에 새로운 메소드를 추가하거나 기존 메소드를 교체하는 것도 가능합니다.2. 메소드 호출의 동적 결정Objective-C 메소드 호출은 컴파일 타임이 아닌 런타임에 ..
2024.05.02 03:50
-
[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
-
[Swift 이코테] Greedy / 그리디 / 탐욕 알고리즘
그리디 알고리즘이란? Greedy algorithm은 최적해를 구하는 데에 사용되는 근사적인 방법으로, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달한다. 한마디로 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 순간마다 하는 선택은 그 순간에 대해 지역적으로는 최적이지만, 그 선택들을 계속 수집하여 최종적(전역적)인 해답을 만들었다고 해서, 그것이 최적이라는 보장은 없다. 하지만 탐욕알고리즘을 적용할 수 있는 문제들은 지역적으로 최적이면서 전역적으로도 최적인 문제들이다. 탐욕 알고리즘이 잘 작동하는 문제는 대부분 탐욕스러운 선택 조건(greedy choice property)과 최적 부분 구조 조건(opti..
-
[Swift] 복잡도 / Complexity
알고리즘의 성능을 나타내는 척도. 시간 복잡도와 공간 복잡도로 나눌 수 있다. - 시간 복잡도: 알고리즘을 위해 필요한 연산의 횟수 - 공간 복잡도: 알고리즘을 위해 필요한 메모리의 양 빅오 표기법 빅오 표기법 명칭 O(1) 상수 시간(Constant time) O(logN) 로그 시간(Log time) O(N) 선형 시간 O(NlogN) 로그 선형 시간 O(N^2) 이차 시간 O(N^3) 삼차 시간 O(2^n) 지수 시간 시간 복잡도 데이터의 개수 N이 천만개(10^7)를 넘어가며 시간 제한이 1초라면, 대략 최악의 경우 O(N)의 시간 복잡도로 동작하는 알고리즘을 작성해야 할 것으로 예상할 수 있다. 데이터의 크기나 탐색 범위가 백억이나 천억(10^10 ~10^11)을 넘가는 경우 O(logN)의 시..
-
[Swift] 누적 합 / Prefix Sum / Cumulative Sum
알고리즘 문제풀이에서의 누적 합은 말 그대로 구간의 누적합을 구하는 문제입니다. 누적 합 배열의 시작 인덱스위의 설명에서 배열 $A$의 시작 인덱스는 $1$로 사용했습니다. 그 이유는 $S[l-1]$ 때문입니다. 시작 인덱스가 $1$이면 $l$의 최솟값은 $1$이고, 여기서 $l-1$은 $0$입니다. 만약, 시작 book.acmicpc.net BOJ Book을 Swift 코드에 맞춰서 다시 읽어보고 이해해 보려고 합니다. int ans = 0; for i in l..
-
14171 swift - Cities and States
[Swift] (자료구조) 해쉬 / Hash chanhhh.tistory.com 처음에 시간 제한이 2초라서 널널하게 보고 2중 for문을 돌렸다가 호되게 시간초과 맞고, 두번째는 저장부터 해시로 저장하자 했는데 중복 값때문에 호되게 틀렸습니다. 14171번: Cities and States To keep his cows intellectually stimulated, Farmer John has placed a large map of the USA on the wall of his barn. Since the cows spend many hours in the barn staring at this map, they start to notice several curious patterns. For exa..
-
[Firebase] iOS UIKit에서의 Google OAuth 로그인 연동 방법 해결 과정
Firebase 를 시작하여 프로젝트 만들기 앱에 Firebase를 추가하여 시작하기 (bundle id, nickname 등록) 구성 파일 다운로드(Google OAuth 사용자는 굳이 다운로드 안해도됨. 잠시 뒤에 credentials가 포함된 구성파일을 준다.) Upload 해도되는가에 대해서 찾아봤는데, 뭐 중요한 내용은 없다고 한다. (https://groups.google.com/g/firebase-talk/c/EEEwttbpPJU) 그래도 저라면 안 올릴 것 같습니다. Package Dependency 추가 https://github.com/firebase/firebase-ios-sdk Appdelegate에 코드 추가 더보기 import UIKit import FirebaseCore @UI..
-
[SwiftUI] Swift Charts / 차트
Swift Charts Construct and customize charts on every Apple platform. iOS 16 버전 부터 등장한 chart 입니다. Swift Charts | Apple Developer Documentation Construct and customize charts on every Apple platform. developer.apple.com Hello Swift Charts - WWDC22 - Videos - Apple Developer Say hello to Swift Charts — a flexible framework that helps you create charts entirely in SwiftUI that look and feel right at..
-
[MacOS] .DS_Store 개념 / 삭제 / 제거 / 보안 관련사항
.DS_Store 파일이란? Mac-OS 기반 운영 체제에서는 'Finder'가 해당 파일을 자동으로 생성, 해당 폴더에 대한 메타데이터를 저장하는 파일이다. DS_Store을 분석해보면 해당 디렉토리 크기, 아이콘의 위치, 폴더의 배경에 대한 정보들을 얻을 수 있다. Apple Mac을 사용하면 생기는 파일입니다. 이 드라이브에는 이름이 .DS_Store인 파일이 하나 이상(숨겨진) 포함되어 있을 가능성이 높습니다. "Desktop Service Store"의 약자이며 파일에는 디렉터리의 파일 및 표시 옵션에 대한 메타 정보가 포함되어 있습니다. Mac-OS 기반 운영 체제에서는 'Finder'가 해당 파일을 자동으로 생성합니다. 다른 *NIX 계열 운영 체제와 마찬가지로 파일 이름 앞에 점이 붙어서 ..
-
[Extension] ShareExtension에서 Containing App을 여는 방법
URL Schemes에 대한 공식문서 About Apple URL Schemes About Apple URL Schemes This document describes several URL schemes that are supported by system apps on iOS, macOS, and watchOS 2 and later. Native iOS apps and web apps running in Safari on any platform can use these schemes to integrate with system apps developer.apple.com Share Extension 프로그래밍 가이드 공식문서 App Extension Programming Guide: Share App Ex..
-
[Framework] Static / Dynamic / 실전, 응용
진행중인 프로젝트에 Share Extension을 도입함으로써 해당 extension에도 snapkit을 적용하게 되었는데, 이를 정적라이브러리인 snapkit static library를 사용하지 않고, SnapKit-Dynamic library 으로 변경하는 과정을 정리하였습니다. Framework 에는 어떤 프레임 워크가 있는지, 지난 포스트에서 알아 보았습니다. 이제 내가 사용하는 라이브러리들이 어떤 라이브러리 인지 확인하고 동적라이브러리로 변경하는 방법을 공유합니다. [Swift] Dynamic Libraries or Static Libraries / 동적 라이브러리, 정적라이브러리 라이브러리란? 라이브러리는 재사용 가능한 코드의 집합입니다. 이 코드들은 특정 작업을 수행하는 함수, 클래스..
-
[Swift] Dynamic Libraries or Static Libraries / 동적 라이브러리, 정적라이브러리
라이브러리란? 라이브러리는 재사용 가능한 코드의 집합입니다. 이 코드들은 특정 작업을 수행하는 함수, 클래스, 서비스, 또는 프레임워크로 구성되어 있습니다. 개발자들은 이러한 라이브러리를 사용하여 애플리케이션을 더 빠르고 효율적으로 개발할 수 있습니다. 라이브러리는 개발자가 직접 일반적인 문제들을 해결하기 위해 코드를 작성하는 대신, 이미 검증된 코드를 재사용함으로써 개발 시간을 단축시키고 애플리케이션의 안정성을 높일 수 있게 도와줍니다. 라이브러리는 크게 두 가지 유형으로 나뉩니다: 정적 라이브러리(Static Libraries): 이들은 애플리케이션의 실행 파일에 컴파일 시점에 포함됩니다. 애플리케이션과 함께 하나의 실행 가능한 파일로 묶여 배포되기 때문에, 애플리케이션이 실행될 때 별도의 로딩이 필..
-
1967 swift - 트리의 지름
₩BFS 사용 [Swift] Breadth-First Search / BFS BFS (Breadth-First Search) 인접한 노드를 먼저 탐색하는 방식. O(Vertex+Edge) A→B→C→D→E→F→G→H 해당하는 그래프는 아래와 같이 인접 리스트로 나타낼 수 있다. let graph: [String: [String]] = [ "A" : ["B", "C"], chanhhh.tistory.com 1. 접근방법. 결국엔 Leaf 에서 Leaf의 길이를 재는 거니까, Leaf에서 갈 수 있는 모든 Leaf 들을 BFS로 탐색하여 가장 긴 것을 찾으면 된다고 판단. => 시간 초과 더보기 var n = Int(readLine()!)! var N = Array(repeating: 1, count: n)..
-
11404 swift - 플로이드
플로이드 워셜 알고리즘 사용 [그래프] 플로이드 워셜(Floyd-Warshall Algorithm) 플로이드 워셜(Floyd-Warshall Algorithm) 컴퓨터 과학에서 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)은 변의 가중치가 음이거나 양인 (음수 사이클은 없는) 가중 그래프에서 최단 경로들을 찾는 알고 chanhhh.tistory.com 중간노드를 거쳐서 갈 수 있는 경우를 고려하여 3중 for문으로 코드를 작성합니다. import Foundation var n = Int(readLine()!)! var cost = Array(repeating: Array(repeating: 987654321, count: n), count: n) for _ in 0..
-
[그래프] 플로이드 워셜(Floyd-Warshall Algorithm)
플로이드 워셜(Floyd-Warshall Algorithm) 컴퓨터 과학에서 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)은 변의 가중치가 음이거나 양인 (음수 사이클은 없는) 가중 그래프에서 최단 경로들을 찾는 알고리즘이다. 알고리즘을 한 번 수행하면 모든 꼭짓점 쌍 간의 최단 경로의 길이(가중치의 합)을 찾는다. 알고리즘 자체는 경로를 반환하지는 않지만, 알고리즘을 약간만 변형시키면 경로를 찾을 수 있다. 이 알고리즘의 일부 버전은 관계 R의 추이적 폐포를 찾거나, 가중 그래프의 모든 꼭짓점 쌍 간의 최대 폭 경로를 (슐츠 선거 제도와 결합해서) 찾는 것이 가능하다. 알고리즘 플로이드-워셜 알고리즘은 각각의 꼭짓점 쌍을 지나는 그래프의 모든 경로를 비교한다. 이 방법은 그래프에..
-
9935 swift - 문자열 폭발
44% 시간초과로 틀린 코드. import Foundation var i=readLine()! let c=readLine()! while (i.contains(c)) { i = i.replacingOccurrences(of: c, with: "") } print(i.isEmpty ? "FRULA" : result) 스택으로 재접근하여 문제풀이. var input = readLine()! let pattern = readLine()! var stack = [Character]() for char in input { stack.append(char) if stack.count >= pattern.count { var isPattern = true for (index, patternChar) in patter..
-
[SPM] Swift Package Manager / 내 Library 만들기
Swift Package Manager Swift 패키지는 개발자가 프로젝트에서 사용할 수 있는 Swift, Objective-C, Objective-C++, C 또는 C++ 코드의 재사용 가능한 구성 요소입니다. 소스 파일, 바이너리 및 리소스를 앱 프로젝트에서 사용하기 쉬운 방식으로 번들로 제공합니다. Xcode는 Swift 패키지를 생성 및 게시하고 패키지 종속성을 추가, 제거 및 관리할 수 있도록 지원합니다. Swift 패키지에 대한 지원은 오픈 소스 Swift 패키지 관리자 프로젝트를 기반으로 구축되었습니다. 패키지 매니페스트에서 사용하는 API에 대해 자세히 알아보려면 패키지를 참조하세요. Swift 패키지 관리자에 대해 자세히 알아보려면 Swift.org 및 오픈 소스 Swift 패키지 관리..
-
[Swift] Libraries, Frameworks, Swift Packages
swift packages에 대해서 정리하고 알아보던 도중 좋은 글이 있어서, 읽어보면서 정리해보려고 쓰는 글입니다. Module Swift의 코드 구성과 접근 제어 개념은 모듈을 기반으로 합니다. 이 뜻은 하나의 타겟 내에서 모든 아래와 같은 모듈들을 internal 접근 수준으로 모든 코드에 접근이 가능하다는 뜻입니다. UI Module: 사용자 인터페이스와 관련된 코드를 포함합니다. ViewController, View, 그리고 각종 UI 구성 요소 관련 코드가 여기에 속합니다. Networking Module: 네트워크 통신에 관련된 코드를 포함합니다. API 호출, 데이터 다운로드 및 업로드, 네트워크 오류 처리 등이 이 모듈에 포함될 수 있습니다. Model Module: 앱에서 사용되는 데이..