본문 바로가기

728x90

난 iOS개발자/iOS

(34)
클린아키텍처 적용하기-03 몇가지 팁과 고민들 클린아키텍처 적용하기-02 테스트  이전 글에 이어서 마무리하는 글. Repository은 그저 중간자 역할뿐인가? 꼭 필요한가? 데이터 엑세스를 하는 Datasource와 UseCase를 연결하기 위한 adaptor 역할이라고 볼 수 있습니다. Datasource와 직접 연결해도 되는것을 불편하게 하나의 과정을 더 밟는게 아닌가 싶지만, 이는 데이터소스의 구체적인 구현 세부사항을 비즈니스 로직으로부터 숨길수 있게 해줍니다. 일관된 인터페이스를 제공해서 비즈니스 로직이 Datasource의 구체적인 구현에 의존하지 않도록 하는것입니다. 때문에 Datasource를 변경하거나 업그레이드 되어도 비즈니스 로직에 영향을 주지 않습니다. 또 데이터 소스로부터 받은 데이터를 애플리케이션이 사용하기 적합한 형태로..
클린아키텍처 적용하기-02 테스트 클린아키텍처 적용하기-01 개념과 흐름이해 이전 글에 이어서 클린아키텍처를 적용하고 테스트 코드를 어떻게 작성할 수 있는지, 코드를 보고 따라가면서 그 장점을 알아보겠습니다. 클린아키텍처를 적용하고 나니 테스트할때 용이하다는 말이 무엇인지 와닿게 되었습니다. 아래 조금 지루한 내용일테지만 차근 차근 봐주시길 바랍니다. 앱의 버전을 최신 버전과 비교하고 업데이트 필요여부를 확인하는 요구사항이 생겼습니다. 설치버전의 숫자가 현재 앱 버전보다 최신버전이 높은경우 팝업을 띄우고 강제 업데이트(앱스토어 이동)를 진행하고자 합니다. 최신 버전은 LatestVersionDatasource을 채택한 구현체가 서버로부터 값을 받아와서 반환하고 있습니다. protocol LatestVersionDatasource { fu..
지극히 주관적인 리팩토링 (이벤트로그는 어디에 넣어야하는가?) 회사 프로젝트를 진행하다보면 다양한 코드를 만나게 된다. 작성자의 의도가 분명한 코드도 있는 반면 어느정도 편리함과 타협하여 쉽게 작성한 코드도 보인다. 물론 지극히 내 주관적인 기준으로 판단했을때의 코드이다. 작성자의 분명한 의도를 내가 파악하지 못했을 수도 있다. 요즘 맞닥들인 문제는 내 스타일과 조직내 코딩컨벤션의 갭이 꽤 크다는 것이다. 내가 정답이라는건 아니지만 내가 보고 고쳐야겠다고 생각이 든 코드도 그리 좋아보이지는 않았다. 구성원이 여러명인 조직에 들어온 것은 또 처음이라 내가 적응을 못하고 있는것은 아닐런지, 스스로 생각해보기도 했다. 처음엔 꽤 혼란스러웠지만 이제는 적응이 되었고 어느정도 분위기도 파악되었다. 아래 부터는 내가 생각한 재구성이 필요한 코드가 어떤것이었는지 설명하면서 어떤..
클린아키텍처 적용하기-01 개념과 흐름이해 배경 최근 진행한 iOS프로젝트에 클린아키텍처를 적용했습니다. 이 글은 클린아키텍처에 대해 학습했던 내용을 복습하고, 실전에 써먹으면서 애매모호 했던 부분들을 나름대로 정리한 글입니다. 배우면서 적용한 첫 프로젝트이기 때문에 중간중간 잘못된 정보가 전달될 수 있으니 이상하다~ 싶은점은 댓글로 남겨주길 바랍니다. 진행했던 프로젝트는 iOS, Android 두 플랫폼에서 동시에 개발이 진행되었습니다. 모바일 아키텍처는 서로 비슷한 부분이 굉장히 많으므로 각 플랫폼 담당자가 아키텍처를 함께 논하고 비즈니스 로직을 맞춘다면 시너지가 있을거라 생각됐습니다. 화면단위로 쪼개어 각 화면에서 필요한 유스케이스를 함께 정의하고 플로우를 맞춘다면 플랫폼이 달라도 담당자끼리 건설적인 대화를 할수 있을거라... 그래서 저와 ..
[iOS] Sandbox App SandBox란 App SandBox란 커널 수준에서 강제 적용되는 맥 OS의 접근 제어 기술입니다. App이 손상될 경우, 시스템과 사용자 데이터의 손상을 억제하도록 설계되어있습니다. App Store에서 유통되는 App들은 모두 App SandBox를 적용시켜야만 합니다. App Sandbox는 각 앱마다 취약한 리소스에 대한 액세스를 제한함으로써 공격자로 인한 사용자 데이터의 도난, 손상 또는 삭제 또는 시스템 하드웨어 해킹에 대한 마지막 방어선을 제공합니다. 파일 시스템 격리: 각 앱은 고유한 디렉토리 내에 파일을 저장하고 액세스할 수 있습니다. 다른 앱의 파일에 직접 액세스할 수 없으며, 사용자의 개인 데이터를 보호합니다. 키 체인: 앱은 감성적이고 중요한 정보를 안전하게 저장해야 합니다..
[iOS] UserDefaults 알아보기 앱이 실행되는 동안 키-값 쌍을 지속적으로 저장하는 사용자 기본 데이터베이스에 대한 인터페이스입니다. 샌드박스 저장을 통해 앱이 제거될 때 까지 지속적으로 저장할 수도 있습니다. 개요 런타임중 UserDefaults 객체를 사용하여 앱이 사용자의 기본값 데이터베이스에서 사용하는 기본값을 읽습니다. UserDefaults는 정보를 캐시하여 기본값이 필요할 때마다 사용자의 기본값 데이터베이스를 열지 않아도 됩니다. 기본값을 설정하면 프로세스 내에서 동기적으로 변경되고 영구 저장소 및 기타 프로세스에 비동기적으로 변경됩니다. 샌드박스? UserDefaults에 저장된 데이터는 앱의 샌드박스 내에 저장됩니다. 샌드박스는 각 iOS 앱에 할당된 고유한 파일 및 데이터 저장 공간입니다. 샌드박스라는 개념때문에 iO..
AppStore 화면 만들어보기 이러한 화면은 너무나 익숙할 것이다. 근데 이런화면 어떻게 만들지..? 다양한 방법이 떠오를 수 있다. 이번에는 ScrollView와 StackView 그리고 CollectionView의 조합으로 위와 같은 화면을 구성해 보고자 한다. 일단 필요한 라이브러리가 있다. 굳이 사용하지 않아도 되지만 편하게 UI구성을 하고 싶다면 SanpKit을 넣어주자. 방법은 아래 링크 참고 2021.10.29 - [앱 개발 도움 링크/Libraries(Github...)] - [iOS] SnapKit 사용법 [iOS] SnapKit 사용법 🤔왜 이걸 쓰지? 개발 시 스토리보드를 사용하여 화면의 UI를 구성할 수도 있지만 Autolayout을 코드로 작성하는 방법도 있다. NSLayoutConstraint를 직접 지정해주..
HomeBrew설치 그리고 실패 HomeBrew? macOS용 패키지 관리자임. 설치만 하면 간단한 리눅스 명령어를 통해 애플리케이션을 설치 할 수있다. Homebrew The Missing Package Manager for macOS (or Linux). brew.sh 설치하기 명령어의 오른쪽 복사하기 버튼을 눌러서 복사하고 Terminal에서 붙여넣기 Enter! 맥 비밀번호를 입력하라고 나오면 입력하고 엔터, 엔터! 다 되었으면 terminal에서 brew버전을 확인해보자. brew --version Warning: /opt/homebrew/bin is not in your PATH. Instructions on how to configure your shell for Homebrew can be found in the 'Nex..
COW(Copy On Write) 원본 또는 복사본이 수정되기 전까지 복사를 하지 않고 원본 리소스를 공유하는것. 수정이 일어날 경우, 그때 복사하는 작업을 함 Swift에서는 CollectionType을 복사해서 사용할 때 발생한다. : Array/ Dictionary/ Set 아래 코드를 보자 var array1 [Int] = [1, 2, 3, 4] var array2 = array1 Array는 구조체이다. array2는 array1을 할당했으니 array1의 값이 array2에서 복사되어야하는데. 그렇다면 array1과 array2는 서로 다른 주소를 갖고 있어야하는것이 맞다. 그러나 cow는 바로 복사하지 않는다. array2에서 수정이 발생하지 않은 경우 array2도 array1의 주소를 참조하고 있는 형태가 된다. 또는 원..
Global DispatchQueue의 QoSClass GCD는 동시 작업을 관리하기 위한 저수준 API다. 계산 비용이 많이 드는 작업을 백그라운드에서 실행시키고 앱의 응답성을 개선하는데 도움이 된다. GCD는 내부적으로 공유 스레드풀을 관리한다. GCD를 사용하면 코드블럭이나 Task 항목을 디스패치 큐에 추가하고 GCD는 이를 실행할 스레드를 결정한다. GCD는 시스템 및 사용 가능한 시스템 리소스에 따라 필요한 병렬 처리량을 결정한다. 대기열 이해 GCD는 디스패치큐 에서 작동한다. 이 대기열은 작업단위를 제출하면 FIFO 순서로 실행한다. 디스패치큐는 스레드로부터 안전하므로 여러 스레드에서 동시에 액세스할 수 있다. 대기열(큐)은 직렬과 동시가 있다. 직렬큐는 주어진 시간에 하나의 작업만 실행되도록 보장하며, 한 작업이 끝나고 다음 작업이 시작되기까..

728x90