-
[iOS] Xcode Target이란?
이번에 새로운 프로젝트를 보고 "어..? 이 프로젝트는 왜 이렇게 타겟이 많이 분리되어 있지..?"라고 느낌이 들었고, 지금까지 iOS 개발을 해오면서 Xcode 프로젝트에 대한 원론적인 이해(?)가 부족했다고 느끼면서 새롭게 공부를 해보았어요.. Target이라고 하면 여러분들이 알게모르게 다들 이런 화면 보셨죠..? 저는 지금 하나의 Target만 있는데, 프로젝트를 생성할 때 UI Test, Unit Test를 포함하셨으면 이 또한 Target이 될 수 있고 또한 빌드를 할 때 각자가 빌드하는 Target이 설정이 되어 있었을거에요.. 근데 그렇다면 Target이란 무엇일까요? 한번 지금부터 제가 공부한 내용을 바탕으로 설명을 해보겠습니다‼️ Xcode Target Target이란 빌드할 프로덕트를..
-
[GIT] Merge vs Rebase 차이
GIT을 프로젝트를 하며 다들 자주 사용하시는데, 혹시 브랜치를 병합할 때, Merge와 Rebase을 사용해본 경험이 있으신가요⁉️ 저는 주로 Rebase fork해온 프로젝트를 upstream에 맞게 동기화하고 싶을 때 사용했는데요. 정보를 fetch upstream을 통해 가져오고 rebase을 통해서 병합을 했었어요. Merge 얘는 upstream이 없고 origin만 있는 상태에서 Git을 관리할 때 사용했었던 방법이에요. 사용하면서 어떤 상황에 사용하는지 형태만 보고 사용했었지, '왜 이걸 사용하지'는 생각을 해보지 않았던 것 같아요. 그래서 이번 기회에 동작 원리를 알아보고 정리해보려고해요~~ 기회가 된다면 다음 GIT 포스팅은 오픈소스를 관리하는 방식인 fokr한 저장소를 관리하는 방법을..
-
[Git] Git merge 전략 (merge, rebase merge, squash merge)
Git을 이용할 때, 히스토리를 관리하는 방법인데요. 평소에는 보통 혼자 개발을 진행했기 때문에, merge만 이용해서 feature로부터 develop 브랜치로 병합하는 형식으로 진행했었는데요. 하지만 여기에 merge를 하는 방법에도 여러가지가 존재합니다. 대표적으로 3가지의 전략이 있는데요. merge, rebase and merge, squash and merge 이렇게 세 가지 입니다. 각각의 전략이 모두 특징을 가지는데 알고 사용하면 각 브랜치를 관리하는데 유용할 것이라 생각이 듭니다. 그렇다면 먼저 얘기하고 가야할 부분은 왜 굳이 이렇게 여러가지 방법을 알고 있어야할까요..?! 우선 커밋 히스토리 관리가 왜 중요한지를 알아야겠죠 커밋 히스토리(Commit History) 보통 개발자들이 작업..
-
[SWIFT] Swift SOLID 원칙
안녕하세요 오늘은 SOLID 원칙에 대해 정리를 해보려고 합니다. 근데, 이것을 Swift 언어에 접목시켜서 이해해보고 작성해보겠습니다 🙌 SOLID란? SOLID 원칙이란 객체지향 설계에 더 좋은 아키텍쳐를 설계하기 위해 지켜야하는 원칙들의 5가지를 앞의 약어만 따서 정리한 단어입니다. 그렇다면 이런 원칙을 왜 알아야할까요? 🧐 아무래도 개발자가 좋은 제품을 생성하기 위해서는 기능을 구현하는 것도 중요하겠지만, 새롭게 어떤 기능이 추가되거나 유지 보수가 되어야 할 때 더욱 생산성 있고 유연하게 대처가 가능해야한다고 생각합니다. 이를 위해서 코드를 어떻게 설계하고 개발해나가는지가 중요하다고 생각합니다. SOLID 원칙은 이러한 좋은 설계를 위한 최소한의 원칙들을 정리해주기 떄문에, 중요하게 됩니다. 디저..
-
[iOS] UICollectionViewLayout 설정
UICollectionView을 자주 사용하실 것 같은데 UITableView와 가장 크게 다른 점은 커스텀하게 Layout을 설정할 수 있는 프로퍼티가 있다는 것 같아요. 기본적으로 2가지 방법으로 Layout을 설정할 수 있는데, 상황에 따라 다르게 사용할 수 있어요. 2가지 방법으로는 ✔️ UICollectionViewFlowLayoutDelegate 활용 ✔️ UICollectionViewFlowLayout 객체 활용 이렇게 2가지 방법으로 설정할 수 있다. UICollectionViewFlowLayout 객체를 활용하는 경우는 엄청 복잡한 레이아웃을 커스텀해야하는 경우나 간단하게 초기 값을 설정하기 위해 사용했어요. UICollectionViewFlowLayoutDelegate 같은 경우는 마찬..
-
[프로그래머스] 더 맵게 - Priority Queue(우선순위 큐)
우선 순위 큐(Priority Queue) 자료구조를 기억하고 있으면 쉽게 풀 수 있는 문제였다. 프로그래머스 더 맵게 문제 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 문제는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶어한다. 모든 음식의 스코빌 지수를 K이상으로 만들기 위해서는 스코빌 지수가 가장 낮은 두 개의 음식을 특별한 방법으로 섞어서 새롭게 만들 수 있다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) 이..
-
[프로그래머스] 단어 변환 - BFS
BFS을 통해 쉽게 풀 수 있는 문제였습니다. 프로그래머스 단어 변환 문제 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 문제는 두 개의 단어 begin, target과 단어의 집합 words가 주어지고 규칙들을 활용해서 begin -> target으로 변환시키는 과정입니다. 여기서 규칙들을 지키면서 변환했을때, 가장 짧게 변환 시킬 수 있는 경로를 구하는 문제입니다. 우선 문제를 보고 가장 짧은 과정을 구하는 문제라고 하였기 때문에, BFS로 접근하여야겠다고 생각..
-
[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로 들어가고 사용시에는 해당 참조..
-
[iOS] Custom Framework 만들기
오늘은 iOS에서 Custom Framework를 만드는 방법에 대해 작성을 해보려고 합니다. 사실 예전에 피드백(?)을 받을 때, Framework 단위로 코드를 작성을 하는 연습을 하면 좋다는 얘기를 들었는데 아..(?) 느낌정도만 왜 좋은지 이해했었는데 몸으로 느끼기 위해서 직접해보겠습니다. 아마 Framewokr 단위로 작성하면 코드 자체가 모듈 단위로 작성되기 때문에, 아무래도 다른 코드와의 Coupling(결합도)가 줄어들고 Cohesion(응집성)은 높아지기 때문이겠죠~ 또한, 코드의 퀄리티 외에도 공부를 해보니 장점이 있는 것 같은데, 이건 다음 포스팅에서 작성해보겠습니다. 오늘은 먼저 어떻게 Custom Framework를 만들 수 있는지 알아보겠습니다 ㅎㅎ Custom Framework..