본문 바로가기

반응형

swift공부

(12)
[Swift] 리픽토링_메서드 정리 - 메서드 내용 직접 삽입, 메서드를 메서드 객체로 전환 메서드 내용 직접 삽입이란?메서드 추출과는 반대로 메서드 기능이 너무 단순해서 메서드명만 봐도 너무 뻔할 경우, 그 메서드의 기능을 호출하는 메서드에 넣고 해당 메서드를 제거하는 방식이다. 리펙토링의 핵심은 의도한 기능을 한눈에 파악할 수 있는 직관적인 메서드명 사용과 메서드를 간결하게 만드는 것이다. 하지만 메서드명에 모든 기능이 반영될 정도로 메서드 기능이 지나치게 단순할 때는 나누어진 메서드를 없애는 것이 오히려 효과적일 수도 있다. func getRating() -> Int { return moreThanFiveLateDeliveries() ? 2 : 1 } private func moreThanFiveLateDeliveries() -> Bool { re..
[Swift] 리픽토링_메서드 정리 - 메서드 추출 1년 정도 현업에서 개발을 하면서 더 나은 코드에 대한 얘기를 나눌 때 근거가 부족하다는 것을 느끼게 되었습니다. 경험으로 좋은 코드를 깨닫게 될 수 있지만 좀 더 빠르고 명확하게 좋은 코드에 대한 고민을 하기 위해서 마틴 파울러의 리펙토링이라는 책을 읽게 되었습니다. 메서드 추출이란?어떤 코드를 그룹으로 묶어도 되겠다고 판단될 때, 해당 코드를 뺴내 목적을 잘 나타내는 직관적 이름의 메서드로 만들기 메서드가 너무 길거나 코드에 주석을 달아야만 의도를 이해할 수 있을 때 코드를 빼내서 별도의 메서드를 만드는 방식 목적에 부합하는 이름으로 메서드를 만들기, 여기서 메서드명은 원리가 아니라 기능을 나타내는 이름이어야 한다. -> 즉 무엇을 하는가를 명확하게 드러내는 메서드명을 써야 한다. ❌ 원리를 나타..
[RealmSwift Test] "오운완" Mock을 활용한 Realm 테스트 요즘 테스트 공부를 한창 하고 있다. realm를 테스트할 때 실제 realm객체에 접근하고자 하면 테스트 간 일관성이 유지되지 않는다고 한다. (음..실제로 가짜 객체를 두지 않고 테스트 코드를 돌려봤을 때 RealmStudio에는 사실 반영이 되지 않았다. 그치만 또 이미 있는 데이터라고 나타나서 테스트도 되지 않았다.. 영향을 주는 것 같기도 주지 않는 것 같기도..더 알아볼 필요가 있을 것 같다.) 그래서 테스트용 가짜 객체를 만드는데 이것을 "Mock"이라고 한다. 실제 서비스에는 ProductionRealm, 테스트에는 MockRealm 이렇게 구분했다. 우선 프로토콜을 사용해서 RealmProvider(어떤 Realm을 제공해줄지) protocol RealmProviderProtocol { ..
DeviceKit 이용해서 기기별 레이아웃 적용 최근 프로젝트를 구상하면서 카메라 화면을 구성해보고 싶다는 생각이 들었습니다. 그런데 카메라는 비율을 보통 4:3 , 16: 9 이렇게 고정된 값으로 많이들 사용하기 때문에 아이폰 기기별 UI의 차이가 컸습니다.. 때문에 이것을 오토레이아웃으로 구현할지, 기기별로 따로 UI를 만들지 고민하다가 이번에 기기별로 따로 대응을 해보고자 했습니다! 그래서 어떻게 해볼 수 있을까 고민을 하다가 좀 더 쉽게 접근을 해보고자 DeviceKit을 사용해봤습니다! https://github.com/devicekit/DeviceKit GitHub - devicekit/DeviceKit: DeviceKit is a value-type replacement of UIDevice. DeviceKit is a value-type..
Swift 공부) iOS Google Admob 구현해보기 ,The Google Mobile Ads SDK was initialized without AppMeasurement 에러 해결 오늘은 앞으로 진행할 프로젝트에 광고를 달아보면 어떨까하는 생각에 Google Admob으로 광고를 띄우는 방법을 알아보았다. https://developers.google.com/admob/ios/quick-start 시작하기 | iOS | Google Developers iOS 앱을 제작 중인 AdMob 게시자를 위한 모바일 광고 SDK입니다. developers.google.com 사실 공식문서 중에 정말 쉽고 간단하게 나와있기 때문에 보고 그대로 따라하면 되지만 중간에 하나의 에러를 만나서 글을 써서 다음에 참고해야겠다라는 마음으로 글을 쓰게 되었다! 1. 모바일 광고 SDK 가져오기 여기에는 2가지 방법이 있다. cocoapods, SPM 공식문서에는 cocoapods을 권장하고 있지만 SPM이..
Swift Realm 알아보기 Realm이란? 모바일에 특화된 NoSQL 데이터베이스로 Swift, Java, Kotlin 등 다양한 SDK를 무료로 제공한다. Swfit를 공부를 하면서 데이터 저장을 필요로 할 때, UserDefaults, CoreData, SQLite등이 있지만 Realm 1) 작업 속도가 빠르고 2) Cross Platform을 지원해, 안드로이드 OS와 DB 공유가 가능 3) Real Studio를 통해 DB 상태를 확인할 수 있고 4) 코드가 직관적이다. https://realm.io/realm-swift/ Realm Swift Fast, Swifty data storage realm.io Model 정의 Realm에서 저장할 데이터 객체를 정의할 떄는 class를 만들고 필요한 property를 정의한다...
swift uikit preview(미리보기) 띄우기 코드로 UI를 작성하다보면 스토리보드랑 다르게 빌드를 해야만 볼 수 있어 불편한 점이 많았다. 그러한 불편한 점을 해결하기 위해서 SwiftUI의 Preview기능을 가져오면 쉽게 확인이 가능하다. (그냥 코드를 복사해서 가져다 쓰면 된다) extension UIViewController { private struct Preview: UIViewControllerRepresentable { let viewController: UIViewController func makeUIViewController(context: Context) -> UIViewController { return viewController } func updateUIViewController(_ uiViewController: UIV..
swift label 행간 늘리기 프로젝트를 하다 보면 디자이너의 요청대로 행간(줄 사이의 공간)을 조절해야 할 때가 있다. 피그마에 다음과 같이 행간을 조절하라는 예시 코드가 나와있다. 이걸 완성해 보도록 하겠다. let paragraghStyle = NSMutableParagraphStyle() paragraghStyle.lineHeightMultiple = 1.23 let titleAttrString = NSMutableAttributedString(string: diaryTitleLabel.text ?? "") titleAttrString.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraghStyle, range: NSMakeRange(0, titleAttrSt..

반응형