일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- mrc
- alamofire
- algorithm
- RxSwift
- 앱의생명주기
- Swift디자인패턴
- firebase
- IOS
- 코딩테스트입문
- ARC
- unittest
- AutoLayout
- firestore
- hackerrank
- Di
- iOS앱 디버깅
- five lines of code
- Safari Inspector
- UIKit
- storekit2
- 리팩터링
- Swift코딩테스트
- 프로그래머스
- ios면접
- SWIFT
- RC
- 카카오맵클론
- five lines of cdde
- TDD
- 클린코드
- Today
- Total
목록전체 글 (96)
샘성의 iOS 개발 일지
1. 가독성 및 유지보수성 향상의도 전달로 가독성 향상불변속성의 범위 제한으로 유지보수성 향상범위 밖의 코드에 영향 안 주고 위의 2항목 실행가독성(의도한대로 코드가 잘 동작한다면)의도 전달하기 위한 코드의 상징유지보수성시작: 현존하는 일부 기능을 변경 할 때마다 ‘새 코드의 위치 선정을 위한 조사하기‘’전역상태‘로 인해 예상치 못한 사이드 이펙트(취약성)이 발생할 수 있다전역상태 찾는 트릭중괄호 찾기 (중괄호 내부의 변수에 외부 데이터가 할당되는 경우가 많음)전역적으로 사용되는 외부 데이터 관찰 및 불변속성 제거하기코드의 작업을 변경하지 않은 채로 유지보수 하는 법리펙터링 중에는 코드가 느려져도 신경X (보통 가독성과 유지보수성보다 성능의 가치가 낮다)성능이 중요한 경우, 리펙토링 다 끝나고 프로파일링..
1. 리팩터링이란?💡 기능을 변경하지 않고 코드를 변경하는 것 대부분의 프로그래머는 코드를 치는 것보다 코드를 이해하는데에 더 많은 시간을 소비한다.코드를 더 빠르게 동작하게 하기더 작은 코드를 만들기더 일반적이거나 재사용 가능한 코드 만들기코드의 가독성 상승, 유지보수 용이가독성을 높여서 시간을 절약하자 (생각하기 편하게, 새로운 기능 추가하기 쉽게)유지보수가 용이해지면 버그가 줄고 수정이 용이해진다테스트 주도 개발을 하면 효과적으로 할 수 있다 (하지만 여기선 다루지 않음) 2. 무엇을? 💡 A. 냄새 나는 코드! (aka 코드 스멜) 여러개 작업을 수행하는 함수5줄이 넘는 긴 함수중복되는 함수여러개의 기능을 가진 클래스 3. 언제? 💡 코딩 할 때마다! (매일 샤워 하듯..) 탐색명세화구현테스..
StoreKit1 -> StoreKit2로 마이그레이션 하기 + 결제 정보를 서버 DB에서 안전하게 유지하도록 유실 방지 로직 추가하기 StoreKit 에서 StoreKit2로 변경StoreKit은 Apple에서 제공하는 인앱 결제 라이브러리이다. 기존 StoreKit에서는 영수증 검증을 위해 transactionId endpoint를 사용했지만 deprecated되면서 영수증 검증을 자동으로 해주는 StoreKit2로 변경하게 되었다.... StoreKit2로 마이그레이션StoreKit에서 StoreKit2로 변경하면서 기본적인 결제를 처리하는 코드public func purchaseSubscription(_ productId: String) async throws -> Transaction? { ..
목적 원하는 모듈을 생성할 때마다 필요한 파일을 하나하나 세팅해주는 번거로움 해결하기. → 모듈에 필요한 코드를 템플릿 파일에 미리 작성해두고 tuist scaffold 명령어를 실행하면 자동으로 해당되는 모듈에 대한 파일 및 코드가 작성 됨. 준비물Tuist 폴더 안에 Templates 폴더 생성Templates 폴더의 하위 폴더로 '원하는 모듈 이름' 폴더 생성하기'원하는 모듈 이름' 폴더 안에 '원하는모듈이름.swift' 파일 직접 생성하기 파일 구조... └── Tuist └── Templates └── Domain └── Domain.swift # Domain 모듈에 대한 템플릿 전체 설정 └── Packa..
서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 생성자 패턴 팩토리 메서드 패턴과의 차이점? [디자인 패턴] 팩토리 메서드 패턴객체 생성을 캡슐화 하여 ‘팩토리 클래스’를 통해 생성하도록 하는 생성 디자인 패턴 구조CreatorProduct 객체를 생성하는 메서드 정의 (protocol / class)Concrete CreatorConcrete Product를 생성하기 위한 구iossammy.tistory.com 팩토리 매서드1 팩토리 - 1 객체 생성구체적 객체 생성 과정을 하위 클래스에 구현하도록 하는 것이 point→ 메서드 레벨에서의 구체화된 인스턴스의 생성 및 구성에 대한 의존성 감소추상 팩토리1 팩토리 - 연관된 여러 종류의 객체 생성연관된 여러 종류 객체의 묶음을 구체적..
객체 생성을 캡슐화 하여 ‘팩토리 클래스’를 통해 생성하도록 하는 생성 디자인 패턴 구조CreatorProduct 객체를 생성하는 메서드 정의 (protocol / class)Concrete CreatorConcrete Product를 생성하기 위한 구체화 된 메서드를 가진 객체ProductCreator을 통해 생성될 수 있는 객체의 추상화 된 공통 Interface 선언 (protocol)Concrete Product:Product에서 선언된 Interface가 구체화 된 실제 객체 Swift 예제 코드// Productprotocol Bread { var name: String { get }}// Concrete Productstruct CreamBread: Bread { var name..
Inspector 사용 이유 앱 내에 띄운 WebView를 디버깅 할 때 Inspector를 사용한다. 해당 웹뷰가 띄워진 과정, 요청한 데이터 등을 확인할 수 있어 앱 내에서 웹뷰를 띄울 때 유용하게 사용된다. 예를 들면 필자는 네이버 로그인을 웹뷰로 구현하는 도중, 웹에서는 콜백 데이터를 넘겨주지만 앱에서는 해당 콜백 데이터를 받지 못하고 계속 흰색 빈 화면이 띄워지는 문제를 겪고 있었다. Xcode 디버깅으로는 웹 내 작업을 정확히 파악하기 힘들어 Inspector를 활용한 경험이 있다. 웹뷰 디버깅을 위한 Inspector 활성화 방법 iOS 16.4 버전부터는 WKWebView의 isInspectable 속성을 true로 설정해야 Inspector를 사용할 수 있다. if #available(i..
개요 저번주에 HIG 스터디에서 Launching 부분을 주제로 공부하였다. 스터디에서 출시한 앱 중 한 앱이 ‘앱을 처음으로 설치 → 실행’ 경우 사용자 정보를 요구한 것이 떠올라 이를 회고하고 리펙토링 하기로 했다. 리펙토링 계획 우선, 해당 앱은 MVC 패턴, CoreData, Podfile, SPM등의 외부 라이브러리가 전혀 들어가있지 않은 상태이다. (심지어 네트워킹도 URLSession으로 함) 정보를 요청하는 화면 제거하기 MainVC에서 유저의 이름 부분을 터치 가능하도록 하기 유저 정보 없을 시에, "User"를 이름 대신 노출 터치시, 이름 등록 및 수정 하는 얼럿창 노출 지역을 나타내는 글자 옆에 버튼 추가하기 기본 날씨 제공 지역은 '서울'로 설정하기 버튼 터치시 CLLocation..