-
[GIT] Merge vs Rebase 차이
GIT을 프로젝트를 하며 다들 자주 사용하시는데, 혹시 브랜치를 병합할 때, Merge와 Rebase을 사용해본 경험이 있으신가요⁉️ 저는 주로 Rebase fork해온 프로젝트를 upstream에 맞게 동기화하고 싶을 때 사용했는데요. 정보를 fetch upstream을 통해 가져오고 rebase을 통해서 병합을 했었어요. Merge 얘는 upstream이 없고 origin만 있는 상태에서 Git을 관리할 때 사용했었던 방법이에요. 사용하면서 어떤 상황에 사용하는지 형태만 보고 사용했었지, '왜 이걸 사용하지'는 생각을 해보지 않았던 것 같아요. 그래서 이번 기회에 동작 원리를 알아보고 정리해보려고해요~~ 기회가 된다면 다음 GIT 포스팅은 오픈소스를 관리하는 방식인 fokr한 저장소를 관리하는 방법을..
-
[iOS] Xcode Target이란?
이번에 새로운 프로젝트를 보고 "어..? 이 프로젝트는 왜 이렇게 타겟이 많이 분리되어 있지..?"라고 느낌이 들었고, 지금까지 iOS 개발을 해오면서 Xcode 프로젝트에 대한 원론적인 이해(?)가 부족했다고 느끼면서 새롭게 공부를 해보았어요.. Target이라고 하면 여러분들이 알게모르게 다들 이런 화면 보셨죠..? 저는 지금 하나의 Target만 있는데, 프로젝트를 생성할 때 UI Test, Unit Test를 포함하셨으면 이 또한 Target이 될 수 있고 또한 빌드를 할 때 각자가 빌드하는 Target이 설정이 되어 있었을거에요.. 근데 그렇다면 Target이란 무엇일까요? 한번 지금부터 제가 공부한 내용을 바탕으로 설명을 해보겠습니다‼️ Xcode Target Target이란 빌드할 프로덕트를..
-
[Design Pattern] VIPER Pattern - iOS Architecture
iOS의 Design Pattern에는 많은 것들이 있죠...? MVC, MVVM, VIPER, RIBs, MVP등이 있는 것으로 알고있습니다. 제가 여기서 사용해본 것은 MVC, MVVM 정도입니다.. 아직 참 갈길이 먼 것 같네요 😢 오늘은 이 중에서 VIPER Pattern에 대해 공부할 기회가 생겨 VIPER Pattern으로 간단한 앱을 구현해봤는데 정리를 해보겠습니다. VIPER Pattern이란? View, Interactor, Presenter, Entity, Router의 약자를 따와서 VIPER Pattern이라는 이름이 명명되었다. 아무래도 각각의 구분이 많은 만큼 역할 단위의 구분이 명확하다. VIPER Pattern의 아키텍쳐 모식도는 다음과 같다. View : 어떤 패턴이든 사용..
-
[SWIFT] where 절
저번 포스팅까지는 SWIFT의 패턴과 패턴 매칭에 대해 알아봤어요. 이번 포스팅에서는 조금 더 고급 문법인 where 절에 대해 알아보려고 합니다 :D where 절은... 음 Database의 Query문을 짤 때 사용했던 기억이 있는데, 그 때도 조건을 추가할 때 사용했었던 것 같아요..🤞 SWIFT에서도 역시 where 절은 조건들을 추가할 때 사용할 수 있는 문법이랍니다. where 절은 크게 두 가지의 용도로 사용된다고 해요..!! 첫번째로는 SWIFT의 패턴들과 결합하여 조건을 추가해줄 수 있어요. 두번째로는 타입에 대한 제약을 추가할 수 있대요. - 이 경우는 특정 프로토콜을 준수하게 하거나 하는 등의 역할을 하는 것 같아요. 그렇다면 오늘 포스팅은 이 where 절의 사용에 초점을 맞추어서..
-
[프로그래머스] 가사 검색 - Trie
처음 접해보는 구조의 문제였고 효율성 테스트까지 상당히 어려웠다.. 프로그래머스 가사 검색 코딩테스트 연습 - 가사 검색 programmers.co.kr 문제는 노래 가사에 사용된 단어들 중, 특정 키워드가 포함된 문자가 몇 개 있는지 찾아내는 문제였다. 여기서 쿼리가 주어지고 그 쿼리에 맞는 단어가 몇개 있는지 찾아내는 것이다. 여기서 쿼리에서는 젤 앞이나 뒤에 "?"라는 문자가 포함될 수 있다. "?"의 개수는 자유롭다. 단, 가운데에 "?"가 포함되는 경우는 없고 앞 뒤에 전부 포함되는 경우도 없다. 그렇다면, 쿼리가 주어지고 각 쿼리당 일치하는 가사가 몇 개나 있는지 찾는 문제였다. 가장 처음에 생각했던 방식은 단순하게 O(n^3)으로 풀 수 있는 방식이었다. 그냥 모든 쿼리마다 단어들을 하나씩 ..
-
[iOS] Core Data 이용 데이터 관리하기 (1/2)
이번에 최근 검색어 기능을 구현해야하는 프로젝트가 있었어요..‼️ 최근 검색어의 경우에는 서버에서 주는 값이 아니고 사용자의 검색 기록이기 때문에 iPhone에 자체적으로 저장되어야 할 것 같더라구요 원래는 iPhone에 자체적으로 저장이 필요할 경우 UserDefualt을 사용해서 저장을 했었어요. 근데 이번의 경우에는 최근 검색어를 10개만 가져오거나 시간 순으로 가져오거나 Model의 형식으로 저장이 되어야 하기 때문에, UserDefault로는 무리가 있다고 생각이 들었어요. 그렇기 때문에 Core Data을 한번 사용해봤습니다. 아... 저장하기 위해서 또 Core Data, Realm, FMDB등의 방법이 있더라구요..‼️ 저는 우선 iOS 기본 프레임워크에 있는 것을 사용하고 싶어서 Core..
-
[iOS] Dynamic Framework & Static Framework
요즘 회사 프로젝트의 크기가 커지다보니 각 모듈간의 의존도도 커지고 빌드 시간도 오래 걸리게 되면서, Framework 단위로 분리해서 관리하는 방법에 관심을 가지게 되었습니다. 그러다보니 모르는 부분들도 있어서 이전에는 가볍게 알고 있던 Static Framework & Dynamic Framework에 대해 좀 더 깊게 알아보려고 합니다 🙃 Dynamic Framework 우선 Dynamic Framework는 Xcode에서 Framework를 생성하게 되면 기본적으로 Dynamic Framework로 생성됩니다. Dynamic Framework는 그림에서처럼 Static Linker를 통해 Dynamic Library Reference가 Application Code로 들어가고 사용시에는 해당 참조..
-
[SWIFT] String Compare (앱 버전 비교)
오늘은 Swift의 String Compare 메소드에 대해 포스팅을 해보려고 합니다. 포스팅을 하게 된 배경은 이번에 회사에서 진행하는 프로젝트에서 앱의 버전별로 현재 지원하는 최소 버전과 비교해서 팝업을 띄우는 스펙이 있었습니다. 근데, 막상하려고하니 어떻게 할지 감이 잘 안왔습니다..? 왜냐하면 앱의 버전은 "3.5.0", "3.7.0"과 같은 String 타입으로 되어있잖아요... '이걸 어떻게 숫자로 비교할 수 있을까..?'라는 생각이 들었습니다. 그래서, 찾아보다보니 comapre이라는 메소드가 있어 해당 메소드를 이용해서 해결이 되었는데 어떻게 되어있는지 자세히 포스팅을 해보려고 합니다~ Compare이란? 우선 Compare을 알아보기 이전에간단하게 비교를 할 수 있는 기본에 사용하는 방..
-
[iOS] Custom Framework 만들기
오늘은 iOS에서 Custom Framework를 만드는 방법에 대해 작성을 해보려고 합니다. 사실 예전에 피드백(?)을 받을 때, Framework 단위로 코드를 작성을 하는 연습을 하면 좋다는 얘기를 들었는데 아..(?) 느낌정도만 왜 좋은지 이해했었는데 몸으로 느끼기 위해서 직접해보겠습니다. 아마 Framewokr 단위로 작성하면 코드 자체가 모듈 단위로 작성되기 때문에, 아무래도 다른 코드와의 Coupling(결합도)가 줄어들고 Cohesion(응집성)은 높아지기 때문이겠죠~ 또한, 코드의 퀄리티 외에도 공부를 해보니 장점이 있는 것 같은데, 이건 다음 포스팅에서 작성해보겠습니다. 오늘은 먼저 어떻게 Custom Framework를 만들 수 있는지 알아보겠습니다 ㅎㅎ Custom Framework..
-
[iOS] 앱에서 Web 보여주기 (WKWebView, SFSafariViewController, Safari 열기)
iOS에서 앱 내에서 Web을 보여주어야 하는 경우가 있습니다. 이 때, 크게 3가지 방법이 있는데요. 이 방법에 대해 간단히 사용법을 알아보고 공부해보겠습니다. 일단 UIWebView를 사용하는 방법도 있는데, 이제는 Deprecated 된 것으로 알고있는데요. (저도 사용해본적은 없습니다..) 그래서 UIWebView를 제외하고 3가지의 방법을 알아보려고 합니다. Safari 앱을 열어서 보여주기 SFSafariViewController를 사용하여 보여주기 WKWebView를 사용하여 보여주기 Safari 앱 가장 간단한 방법인데요. 그냥 아이폰에 설치된 Safari를 열어서 웹 페이지를 로딩하는 방법입니다. 코드도 정말 간단하고 별도의 설정도 필요없는데요. 장점이라하면은 간단함...?! 단점은 커스..