-
[iOS] CALayer란
다들 UIView의 요소들을 둥글게 만들고 싶을 때, layer.cornerRadius를 이용해서 둥글게 만든 기억이 있으시죠⁉️ 바로 그 layer가 이 UIView의 요소인 CALayer 클래스를 이용해서 한 방법이랍니다. 그렇다면, 이 클래스는 무엇일까요..⁉️ 면접에서도 나오는 질문인데, UIView와 CALayer의 차이..?! 개발자 문서를 보면 렌더링을 위한 Core Animation 계층이라고 나와있습니다. 생각해보면 그동안 UIView.layer을 이용했던 작업들은 보통 그래픽적인 요소들이었던 것 같아요. ex) 그림자, 그라데이션, 모서리 둥글게 만들기 등등의 작업들을 했었어요. 그렇다면 CALayer 클래스를 이용해서 그래픽적인 작업을 하면 어떤 이점이 있어서 굳이 분리해서 사용할까요..
-
[GIT] Merge vs Rebase 차이
GIT을 프로젝트를 하며 다들 자주 사용하시는데, 혹시 브랜치를 병합할 때, Merge와 Rebase을 사용해본 경험이 있으신가요⁉️ 저는 주로 Rebase fork해온 프로젝트를 upstream에 맞게 동기화하고 싶을 때 사용했는데요. 정보를 fetch upstream을 통해 가져오고 rebase을 통해서 병합을 했었어요. Merge 얘는 upstream이 없고 origin만 있는 상태에서 Git을 관리할 때 사용했었던 방법이에요. 사용하면서 어떤 상황에 사용하는지 형태만 보고 사용했었지, '왜 이걸 사용하지'는 생각을 해보지 않았던 것 같아요. 그래서 이번 기회에 동작 원리를 알아보고 정리해보려고해요~~ 기회가 된다면 다음 GIT 포스팅은 오픈소스를 관리하는 방식인 fokr한 저장소를 관리하는 방법을..
-
[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] Swift Method Dispatch - Dynamic, Static
안녕하세요 :) 저희는 매주 월요일 주간 회의를 진행하는데, 희의를 진행할 때 리더님이 주제를 하나씩 가져와주셔서 대화의 장을 마련해주십니다. (덕분에 많은 것을 배우고 있습니다..) 그래서, 오늘 포스팅을 해 볼 주제가 바로 그 때 얘기했던 주제입니다..!! 사실 오늘 회의를 할 때, Method Dispatch에 대해서 들어본 적이 없어서 거의 얘기를 못했는데요 😭 그래서, 회의가 끝나고 혼자서 찾으면서 공부해보았답니다.. 오늘은 Swift의 Method Dispatch에 대해서 알아보도록 하겠습니다. Method Dispatch in Swift 우선 Method Dispatch란 Swift에서 여러분들이 Method를 호출할 때, 현재 메모리에서 어떻게 각 메소드를 실행시키고 어떤 메소드를 실행시킬..
-
[Git] Git merge 전략 (merge, rebase merge, squash merge)
Git을 이용할 때, 히스토리를 관리하는 방법인데요. 평소에는 보통 혼자 개발을 진행했기 때문에, merge만 이용해서 feature로부터 develop 브랜치로 병합하는 형식으로 진행했었는데요. 하지만 여기에 merge를 하는 방법에도 여러가지가 존재합니다. 대표적으로 3가지의 전략이 있는데요. merge, rebase and merge, squash and merge 이렇게 세 가지 입니다. 각각의 전략이 모두 특징을 가지는데 알고 사용하면 각 브랜치를 관리하는데 유용할 것이라 생각이 듭니다. 그렇다면 먼저 얘기하고 가야할 부분은 왜 굳이 이렇게 여러가지 방법을 알고 있어야할까요..?! 우선 커밋 히스토리 관리가 왜 중요한지를 알아야겠죠 커밋 히스토리(Commit History) 보통 개발자들이 작업..
-
[iOS] Xcode Target이란?
이번에 새로운 프로젝트를 보고 "어..? 이 프로젝트는 왜 이렇게 타겟이 많이 분리되어 있지..?"라고 느낌이 들었고, 지금까지 iOS 개발을 해오면서 Xcode 프로젝트에 대한 원론적인 이해(?)가 부족했다고 느끼면서 새롭게 공부를 해보았어요.. Target이라고 하면 여러분들이 알게모르게 다들 이런 화면 보셨죠..? 저는 지금 하나의 Target만 있는데, 프로젝트를 생성할 때 UI Test, Unit Test를 포함하셨으면 이 또한 Target이 될 수 있고 또한 빌드를 할 때 각자가 빌드하는 Target이 설정이 되어 있었을거에요.. 근데 그렇다면 Target이란 무엇일까요? 한번 지금부터 제가 공부한 내용을 바탕으로 설명을 해보겠습니다‼️ Xcode Target Target이란 빌드할 프로덕트를..
-
[iOS] UILabel - 현재 적용된 Line 수 구하기
오늘은 회사에서 개발을 진행하면서 UX적으로 UILabel의 Line이 3줄을 넘어갈 경우, 특정 부분을 ...으로 처리해주는 요구사항이 있었어서 해당 부분을 해결하기 위해 사용했던 방법에 대해 알아보려고 합니다. 이 요구사항을 구현하기 위해 많은 삽질(?)들을 했었는데요. 처음엔 아... 한 글자마다 width가 다르기 때문에, 한 글자의 크기를 구할 수 있다면 최대 라인에서 넘어간 글자만큼의 크기를 구해서 그정도의 크기에 맞게 해당 문자를 ...으로 처리해주어야겠다 생각해서 삽질을 시작했습니다.. (i, ㅁ의 넓이가 다르잖아요..? 그래서 각 넓이를 구해야겠다 생각했습니다.) 하지만 이 방법은 아닌것 같다고 생각이 들었고, 구글링을 해보아도 한 글자의 넓이를 구하는 부분은 나오지 않는 것 같더라구요 ..
-
[iOS] 앱에서 Web 보여주기 (WKWebView, SFSafariViewController, Safari 열기)
iOS에서 앱 내에서 Web을 보여주어야 하는 경우가 있습니다. 이 때, 크게 3가지 방법이 있는데요. 이 방법에 대해 간단히 사용법을 알아보고 공부해보겠습니다. 일단 UIWebView를 사용하는 방법도 있는데, 이제는 Deprecated 된 것으로 알고있는데요. (저도 사용해본적은 없습니다..) 그래서 UIWebView를 제외하고 3가지의 방법을 알아보려고 합니다. Safari 앱을 열어서 보여주기 SFSafariViewController를 사용하여 보여주기 WKWebView를 사용하여 보여주기 Safari 앱 가장 간단한 방법인데요. 그냥 아이폰에 설치된 Safari를 열어서 웹 페이지를 로딩하는 방법입니다. 코드도 정말 간단하고 별도의 설정도 필요없는데요. 장점이라하면은 간단함...?! 단점은 커스..
-
[iOS] UICollectionViewCompositionalLayout (1)
우선 이번 글에서는 UICollectionView의 Layout을 지정하는 새로운 방법을 알아보려고합니다 구성을 위한 가장 기본적인 컴포넌트와 어떤 구조를 가지고 있는지 정도만 알아보고 다음 글에서 좀 더 구체적인 사용법들을 포스팅해보겠습니다 :) UICollectionViewCompositionalLayout 우선 애플에서는 해당 레이아웃에 대해 유연하고 적응력 있게 우리가 기존에 사용하던 CollectionView의 레이아웃을 구성할 수 있다고 설명하고 있습니다 A layout object that lets you combine items in highly adaptive and flexible visual arrangements. UICollectionViewCompositionalLayout은 한..
-
[iOS] Custom Framework 만들기
오늘은 iOS에서 Custom Framework를 만드는 방법에 대해 작성을 해보려고 합니다. 사실 예전에 피드백(?)을 받을 때, Framework 단위로 코드를 작성을 하는 연습을 하면 좋다는 얘기를 들었는데 아..(?) 느낌정도만 왜 좋은지 이해했었는데 몸으로 느끼기 위해서 직접해보겠습니다. 아마 Framewokr 단위로 작성하면 코드 자체가 모듈 단위로 작성되기 때문에, 아무래도 다른 코드와의 Coupling(결합도)가 줄어들고 Cohesion(응집성)은 높아지기 때문이겠죠~ 또한, 코드의 퀄리티 외에도 공부를 해보니 장점이 있는 것 같은데, 이건 다음 포스팅에서 작성해보겠습니다. 오늘은 먼저 어떻게 Custom Framework를 만들 수 있는지 알아보겠습니다 ㅎㅎ Custom Framework..