전체 글

 iOS developer.
· iOS/Combine
아래는 Apple 공식문서의 설명을 번역했습니다. (https://developer.apple.com/documentation/combine) Customize handling of asynchronous events by combining event-processing operators. 이벤트 처리 operator를 결합하여, 비동기 이벤트 처리를 Customize 하는 Framework. Combine framework는 시간 경과에 따른 값 처리를 위한 선언적 Swift API를 제공합니다. 이 값들은 많은 종류의 비동기 이벤트들을 나타낼 수 있습니다. Combine은 publisher가 시간이 지남에 따라 변경될 수 있는 값을 노출하고, subscriber가 publisher로부터 이러한 값들을..
· Dev Terms
의존성, 의존성 주입, 의존성 역전에 대해서 정리하려고 합니다. 의존성 아래와 같은 코드가 있을 때, 'A클래스는 B클래스에 의존성을 갖는다'라고 합니다. class A { let b = B() // 'A클래스는 B클래스에 의존성을 갖는다' } class B { } 이때 객체 인스턴스를 사용하는 곳(A)을 클라이언트(Client)라고 부르고, 의존성(a dependency)은 사용되는 객체 인스턴스(B)를 말합니다. '의존성이 변하면, 클라이언트에 영향을 미치게 되는 관계'입니다. 의존성 주입(Dependency Injection, DI) 위 코드는 의존성을 클라이언트가 직접 인스턴스를 만들고 있습니다. 아래와 같이 의존성의 인스턴스를 외부로부터 생성하여 전달받는 것을 의존성 주입라고 부릅니다. clas..
· iOS/iOS Dev
Swift Package Manager로 Package 배포하기 개발할 때 유용한 패키지들을 Swift Package Manager, CocoaPods, Carthage를 통해서 Dependancy 세팅을 자주 하는데요. 매번 유용한 라이브러리들을 사용하기만 하면서, 이런 건 어떻게 배포하는 걸까? 싶었는 swifty-cody.tistory.com 앞 포스팅에서 Swift Package Manager로 Package 배포를 해봤는데, 해당 패키지를 CocoaPods으로도 배포하고 싶어서 시도해보고 경험을 공유해봅니다. 1. 일단 아무 폴더에다 들어가서 터미널을 통해 아래 명령어를 써줍니다. pod lib create (패키지명) 2. 그리고 5가지 질문에 자신의 패키지에 맞는 선택을 하면 pod temp..
· iOS/iOS Dev
개발할 때 유용한 패키지들을 Swift Package Manager, CocoaPods, Carthage를 통해서 Dependancy 세팅을 자주 하는데요. 매번 유용한 라이브러리들을 사용하기만 하면서, 이런 건 어떻게 배포하는 걸까? 싶었는데 이번 기회에 알아보게 되었습니다. 생각보다 쉽게 배포가 되었습니다. 1. Github에서 Public Repo 생성 2. 로컬에 클론 받기 3. 터미널에서 클론 받은 경로로 들어가서 아래 명령어 실행 swift package init 실행하고 나면 아래와 같이 파일들이 생깁니다. (LICENSE 파일은 Github에서 생성되어 클론받은 파일) 4. Package.swift, README.md 및 Sources, Tests 작성해 줍니다. 저는 Package.swi..
· iOS/iOS Dev
https://github.com/redxoul/AESwift GitHub - redxoul/AESwift: Data and NSData Extension made for AES encryption/decryption only with Swift. AES-128, AES-192, AES-25 Data and NSData Extension made for AES encryption/decryption only with Swift. AES-128, AES-192, AES-256 encryption/decryption is supported. - GitHub - redxoul/AESwift: Data and NSData Extension mad... github.com Github를 통해서 Swift Pack..
· Coding Tests
1에서부터 N까지 존재하는 소수를 찾는 알고리즘입니다. 고대 그리스 수학자 에라토스테네스가 발견하였으며, 구하는 방법이 마치 채에 거르는 것과 같아 '에라토스테네스의 채'라고 불립니다. 예를 들어 1~100사이의 소수를 찾는다고 하면, 1은 합성수가 아니므로 지워줍니다. 2부터 시작해서 자신을 제외한 2의 배수를 모두 지워줍니다. 3부터 시작해서 자신을 제외한 3의 배수를 모두 지워줍니다. (4는 2단계에서 지워졌으므로)5부터 시작해서 자신을 제외한 5의 배수를 모두 지워줍니다. (6은 2단계에서 지워졌으므로)7부터 시작해서 자신을 제외한 7의 배수를 모두 지워줍니다. 위 과정을 계속 반복합니다. 코드로 작성하면 아래와 같습니다. // '에라토스테네스의 채'로 1~N범위의 prime을 찾기 public ..
· iOS/Swift
코딩테스트를 풀이할 때 유용했던 XOR 연산자(^)입니다. XOR 연산자는 같은 수를 2번 연산했을 때 없어지는 속성이 있습니다. 게다가 그 같은 수 2번의 위치는 꼭 붙어있지 않아도 상관이 없습니다. 3^5^5 // 3 3^5^5^3 // 0 3^3^5 // 5
· iOS/Swift
코딩테스트 풀이할 때 유용했던 String 생성자입니다. 입력한 value를 N진수(radix)로 변환해줍니다. 11진수 이상일 때 uppercase로 반환해주는 parameter도 제공합니다. 아래는 예시입니다. String(10, radix: 2) // 1010 String(999999, radix: 16) // f423f String(999999, radix: 16, uppercase: true) // F423F
· iOS/RxSwift
RxBlocking은 바로 전 포스팅에서 정리했던 RxTest와 같은 TestScheduler는 없이 Observable의 Event방출을 검증하는 방법입니다. 단순히 Observable이 특정값들을 방출하는 것을 검증할 때는 RxTest가 아니라 RxBlocking만으로 충분할 것입니다. RxBlocking은 Observable의 next이벤트를 배열로 변환하는 방법을 제공하여, 해당 값을 TestAssertion으로 테스팅할 수 있도록 해줍니다. Observable에 .toBlocking()을 사용하면 Observable을 BlockingObservable로 전환해주고, BlockingObservable은 .toArray()를 통해 next이벤트들을 complete이벤트가 발생할 때까지 배열로 전환시..
· iOS/RxSwift
보통의 유닛테스트라면 지난 글에서처럼 각 메서드들의 Input에 따른 Output값을 XCTest의 XCTAssertion을 통해서 테스트코드를 작성하면 됩니다. XCTest와 Nimble 기능을 구현하는 것도 중요하지만, '구현된 기능이 의도한 대로 당연하게 동작하는가?'를 테스트해보는 테스트 코드의 작성도 중요합니다. 배포를 하기 전에 사전에 문제를 발견할 수 있는 좋은 swifty-cody.tistory.com 하지만 RxSwift로 작성한 코드의 유닛테스트는 어떻게 할까요? RxSwift에서 사용하는 Observable은 '값이 아니라 시퀀스'이기 때문에 XCTest로 바로 테스트를 작성하기 어려울 수 있는데, 이를 위해서 RxTest와 RxBlocking이 준비되어 있습니다. (우리 Rx는 계획..
· Dev Life
살짝 늦은 2022년 회고와 2023년 목표를 써봅니다. 2022년은 나름 많은 변화가 있었던 거 같습니다. 변화의 중점은 ‘성장의 습관 들이기’였는데, 1년 전과 비교를 해보았을 때 성공했다고 스스로 평을 해보려 합니다. 1. 새벽기상 지난겨울부터 새벽 5시 기상을 하기 시작했습니다. 잠이 많은 편인데, 성장을 해야겠다고 마음을 먹고 1년간 해오니 이제 새벽에 일어나지 않거나, 새벽에 일어나서 아무것도 하지 않으면 이상한 기분이 들 정도입니다. 새벽에 일어나서 아침식사 전까지 책이나 글을 읽거나, 글을 쓰거나, 공부를 하는 습관이 들어 매우 뿌듯합니다. 혼자 했으면 힘들었을 수도 있지만 아내도 함께 동참해주어서 좀 더 잘할 수 있지 않았나 생각합니다. 감사합니다. 2. 블로그 글을 잘 써보고 싶어 블로..
· iOS/iOS Dev
기능을 구현하는 것도 중요하지만, '구현된 기능이 의도한 대로 당연하게 동작하는가?'를 테스트해보는 테스트 코드의 작성도 중요합니다. 배포를 하기 전에 사전에 문제를 발견할 수 있는 좋은 방법이며, 테스트가 용이한 코드를 작성하는 것 자체가 코드의 질을 높여줍니다. Xcode에서는 UnitTest, UITest를 위해 XCTest라는 framework를 제공합니다. XCTest를 작성하는 방법은 다음과 같습니다. (1) XCTestCase를 상속받는 클래스를 만듭니다. (2) setUp 메서드를 override한 후 작성해 주면, 테스트 코드가 동작하기 전에 호출되어 테스트하는데 필요한 리소스들을 미리 세팅해 줄 수 있습니다. (3) test로 시작하는 메서드를 작성하고 테스트 코드를 작성해줍니다. fi..
SwiftyCody
 iOS.dev