분류 전체보기
-
[Swift] Method dispatch와 V-TableiOS/Swift 2022. 8. 20. 22:11
iOS 개발자라면 꼭 시청해야 한다고 생각하는 WWDC 세션인 Understanding Swift Performance의 내용 중 Method dispatch에 대해서 공부하며 적은 글입니다. 출처는 알아보기 쉽도록 각 단락마다 적어놓았습니다. Static Dispatch 컴파일 타임에, 실행될 구현체를 결정할 수 있습니다. 런타임 시 올바른 구현체로 직접 jump 할 수 있습니다. (메모리 상에서 해당 코드의 주소로 이동하는 것이 jump로 표현되는 듯하다. 어셈블리어와 비슷한 느낌) 이 경우 컴파일러가 어떤 구현체가 실행될 것인지에 대해서 가시성을 가질 수 있습니다. (어떤 구현체가 실행될지 안다) 또, inlining과 같은 매우 적극적인 최적화 기법을 사용할 수 있습니다. Dynamic Dispa..
-
[짧] Shell Script의 활용 (Alfred & Applescript)기타/아이디어 | 짧은 생각 2022. 7. 24. 21:54
쉘 스크립트에 대해서 공부를 해보니, 내 작업환경에도 적용해보고 싶은 생각이 들었다. 하지만 생각나는 활용 방안은 배포 자동화 정도밖에 없어, 마땅히 활용할 수 있는 곳이 없었다. 그러다가 Alfred의 workflow를 생각하게 되었다. 이렇게 workflow에 shell script를 연결해서 활용할 수 있었다. 또한 mac application도 활용할 수 있는 방법이 있다. 위와 같이 Applescript에 연결해서 mac application에 특화된 script도 작성할 수 있다. 이를 위해서는 Applescript에 대해서 공부해야한다. 또한 각 application마다 document가 있어서 이를 보고 활용할 수 있다. 간단하게는 Build & Run, Clean기능을 만들어 볼 수도 있..
-
[백준] 18258 큐 2 - SwiftiOS/Swift 2022. 6. 10. 16:40
문제분석 문제 자체는 매우 간단하다. 큐를 구현해서 입력으로 주어지는 query에 대해서 큐 연산을 처리하면 된다. 하지만 Swift로 이 문제를 해결할 때에는 몇가지 주의사항이 있다. Swift는 표준입출력이 느리다. Array의 removeFirst()의 시간복잡도는 O(N)이다. 1번으로 인해서 입출력에 대한 처리를 해 주어야 하고, 2번으로 인해서 효율적인 큐를 구현할 방법을 생각해야 한다. 위 주의사항 때문에 이 문제를 Swift로 해결하기 매우 까다롭다. 첫 번째 사항에 대해서는 아래 gist의 글을 참고하면 된다. 이해는 하기 어려울 것이다. https://gist.github.com/JCSooHwanCho/30be4b669321e7a135b84a1e9b075f88#file-usage-swi..
-
[Swift Grammar] Guard구문에서의 non-Optional 선언iOS/Swift 2022. 5. 11. 14:50
한 줄 요약 (guard) case let을 사용해 선언해주면 된다. 본문 가끔 guard구문에서 여러가지 조건을 추가하기 위해서, non-Optional의 새로운 변수를 선언해야 하는 경우가 생긴다. guard구문 안에서 변수를 선언하게 되면, 해당 변수가 optional인지 아닌지에 대한 검사를 통해 Early exit이 이루어진다. 즉, guard구문 안에서는 항상 Optional 변수가 선언되어야 하므로, non-Optional 변수에 대해서는 오류가 발생한다. 이 때 case let을 사용해 선언해주면 오류를 해결할 수 있다. 예시를 통해서 자세히 알아보면 다음과 같다. 예시 SwiftUI에서, symbolName을 String으로 입력 받아, symbolName에 대응하는 systemName을..
-
[Xcode] Info.plist가 사라졌다.개발 환경/Xcode 2022. 5. 4. 18:20
공부를 위해 새로 SwiftUI 프로젝트를 만들고 여러가지 작업을 하던 중, Info.plist가 사라졌다는 것을 발견했다. 다행히 오류가 아닌 Xcode 13부터 변경된 부분이라고 한다. 정확한 release note 링크가 사라졌지만, 본문은 다음과 같았다. “Projects created from several templates no longer require configuration files such as entitlements and Info.plist files. Configure common fields in the target’s Info tab, and build settings in the project editor.” 관리해야 할 파일이 하나 줄어서 좋은 면도 있지만, 이제는 XML..
-
Dependency Invsersion Principle 이해하기 with SwiftCS/OOP 2022. 2. 19. 17:43
모든 내용은 레퍼런스를 보며 혼자 공부한 내용이므로 잘못된 내용이 포함될 수 있습니다. 내용에 대한 피드백은 감사히 받겠습니다. 서론 이번 글에서는 Dependency Invsersion Principle 이하 DIP에 대해서 이해해 보려고 한다. 5가지나 되는 SOLID원칙 중 단번에 DIP에 대해서 설명하는 이유는 객체지향의 핵심 원칙이라고 생각하기 때문이다. 단순히 DIP을 이해하는 것만으로도 사고의 확장이 가능할 것이라고 기대한다. DIP이란? In object-oriented programming, the Dependency Inversion Principle refers to a specific form of decoupling software modules. When following thi..
-
iOS 사용 현황 모니터링 사이트학습 레퍼런스 2022. 2. 11. 02:49
https://developer.apple.com/kr/support/app-store/ App Store - 지원 - Apple Developer App Store 사용자는 App Store에서 iPhone, iPad, Mac, Apple TV 및 Apple Watch용 앱을 쉽게 찾고 구입하고 다운로드할 수 있습니다. Apple Developer Program에 등록하여 앱을 디자인 및 개발하고 App Store에 앱을 배포 developer.apple.com
-
[Git] 특정 파일을 Remote에 있는 과거 commit에서까지 전부 삭제하기개발 환경 2022. 2. 6. 21:55
문제 상황 이번 게시글이 특정하는 상황은 다음과 같습니다. 기존에는 A파일이 공개해도 되는 파일이었지만 개발을 하다 보니 A파일을 비공개로 전환할 필요가 있을 때가 있습니다. 이럴 때 .gitignore에 제외 항목으로 등록하더라도, 과거에 작성한 commit에는 A파일의 흔적이 남아있게 됩니다. 또는 A파일을 비공개로 해야 했기에 레포지토리를 private로 생성했다가, 나중에 필요에 의해 레포지토리를 public으로 변경해야 할 때가 있습니다. 이 때도 역시, 기존의 commit에 남아있는 A파일의 흔적을 지우지 못하면 public으로 전환할 수가 없습니다. 이러한 상황들에서 A파일의 흔적을 완전히 지우고 싶을 때 지금 소개해드리는 방법을 사용하시면 됩니다. 파일의 흔적을 완전히 지우는 방법 일단, ..