일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Realm
- SRP
- DependencyInjection
- MainScheduler.asyncInstance
- 코테
- MainScheduler.Instance
- 청년취업사관학교
- DispatchQueue
- SwiftUI
- 명품cppProgramming c++
- combine
- MethodSwilzzling
- data_structure
- gitflow
- IOS
- DynamicMemberLookup
- DiffableDataSource
- cleanarchitecture
- 오픈채팅방
- rxswift
- 등굣길
- GIT
- swift
- RaceCondition
- SeSAC
- CoreBluetooth
- leetcode
- GCD
- 프로그래머스
- MainScheduler
- Today
- Total
목록분류 전체보기 (73)
Do.
Introduce Result Type은 Swift 5에서 도입되어 SSL(Swift Standart Library)에 포함된 문법입니다. 동작의 수행 결과를 Success 인지 Failure인지 구분해서 나은 가독성과 코드 분기를 제공해줍니다. (개인 의견: 테스트 코드를 작성해본 사람은 알겠지만, try-catch에서 catch 아래는 코드 커버리지에 포함이 안되어서 미묘하게 킹받는데, 그런 사소한 부분을 해결해 주기도 한다.) 본 글은 Result Type을 반환값으로 쓰는 방법으로 Result Type 자체에 대한 내용은 다루지 않겠습니다. 왜 Return 값으로 Result Type을 쓰고싶었을까? Data Layer를 작성하다보면, 해당 비즈니스 모델에는 iOS 버전이나 라이브러리를 의존하고 ..
꽤 자극적인 주제죠? 네 오늘은 SwiftUI에서 MVVM을 멈춰야 하는가에 대한 제 생각을 써보려고 합니다. 결론은 쓰세요 입니다. 반박시 여러분 말이 맞습니다. 👍 본문에 들어가기 앞서, 민감한 주제라고 생각하기 때문에, 누가 그러한 주장을 했는지는 모두 생략하도록 하겠습니다. 본 글에서 작성하는 '여론'의 근거는 주로 iOS Developer Slack 채널 raywenderlich 웨비나, 블로그 글 등을 참고했습니다. 이제 왜 이러한 결론에 도달했는지 설명 드리겠습니다. SwiftUI의 State와 Binding은 View Model 인가? 최근들어 iOS Developer Slack 채널이나, 온갖 뉴스레터에서 SwiftUI Framework에서는 MVVM을 쓰지 말자는 논지의 아티클을 정말 ..
Intro 코드를 작성하다 보면, 특정 기능을 다른 객체에 의존해야 하는 상황이 생깁니다. 간단한 예로 TIL 앱을 만들었다고 가정했을 때, 데이터를 저장하는 객체를 DataManager 와 같은 이름으로 만들어서 쓸 수 있겠죠. 이 의존성을 받는 객체는 유저의 액션에 따라, 로직 흐름에 따라 호출이 이루어지는데요. 호출을 하는 대표적인 두 가지 방법이 바로 Singleton Pattern과 Dependancy Injection입니다. 각 개념에 대해서는 별도로 소개하지 않겠습니다. Singleton 두 개념은 서로 반대 진영에 있는 것으로 볼 수 있는데요, 우선 Singleton은 인스턴스를 전역에 올려두고, 어디에서든 쉽고 빠르게 접근할 수 있다는 장점이 있습니다. 아래 코드는 어떤 DataSourc..
Intro Swift로 된 라이브러리를 구경하다 보면, Class의 @Attribute로 dynamicMemberLookup이라는 것이 붙은 것을 본 적이 있다. dynamicMemberLookup이 무엇인지, 어떻게 쓰이는지 알아보자 What is Dynamic member lookup 먼저 이것이 무엇인지만 간략하게 설명하자면 '실제 객체에 존재하지 않는 프로퍼티(멤버 변수)를 Dot Syntex로 접근하는 문법` 으로 몬 쌉소린가 싶습니다. 하지만 이 개념을 알고 난 뒤에는 똑같이 설명하게 되실 겁니다. 우선 당연한 예제를 하나 볼게요 struct Developer { let languages: [String: Int] } var henry = Developer(languages: [ "swift"..
Issue 서버에서 A.Request의 요청 결과를 받고 A의 결과에 따라 B.Request를 수행해야 하는 상황 Combine으로는 이를 어떻게 처리를 해야 할까 고민했습니다. A_Request.sink { _ in } receiveValue: { data in //processing B_Request.sink { _ in } receiveValue: { data2 in //processing + data2 processing } } 무식한 방법으로는 위와 같이, A_Request를 받고 내부에서 B_Request를 또 호출하는 방법이지만, 괜찮은 코드는 아닙니다. 코드 자체가 불필요한 뎁스를 가지기도 하고 가독성도 떨어지며, 두 기능을 분리하기가 쉽지 않네요. Solution 소개 드릴 기능은 Com..
문제 SwiftUI는 withAnimation으로 간단하게 애니메이션을 할 수 있는데, 종종 사라질 때 이 애니메이션이 작용하지 않는 듯한 모습을 보입니다. Tap을 하면 Circle은 자연스럽게 opacity Transition이 동작하는데, 글자는 나타날 때는 애니메이션이 잘 되는거 같은데, 사라질 때는 애니메이션이 동작하지 않는 것 처럼 뿅하고 사라집니다. 더보기 struct ContentView: View { @State var state: Bool = false var body: some View { VStack { Button { withAnimation { state.toggle() } } label: { Text("Tap \(state ? "On" : "Off")") } ZStack { C..
소개 이제 막 현업에서 일을 하게 되었는데, Git-flow가 아직 습관이 안되어서, Feature 브랜치에 작성 할 내용을 실수로 Develope 브랜치에서 작성 해버렸습니다. 작성 내용이 생각보다 많아서, 이를 복사해놓고, 초기화 하고 브랜치를 또 새로 파서 거기에 붙여넣고 하자니 시간이 너무 오래걸릴 것 같더라구요. 그래서 찾아보니 Stash를 통해 간단히 해결할 수 있었습니다. Stashes 우선 Stash는 은닉이라는 뜻입니다. 커밋하기 전 내용을 로컬 저장소에 잠깐 임시저장 할 수 있는 기능이죠. 커밋 전 내용을 왜 잠시 저장해 두어야 할까요? 예를 들어서 특정 기능을 개발하고 있는데, 해당 기능 동작이 아직 완성 되지 않았는데, 다른 기능을 작성해야 한다고 합니다. 이때 다른 브랜치로 이동하..
소개 SeSAC(청년취업사관학교, 이하 SeSAC)에서 진행한, iOS 앱 개발자 데뷔 과정 수료 및 취업 후기를 써보고자 합니다. 결론부터 얘기하자면 수료 후 한달만에 꽤 규모있는 회사에 취업했고, 원래 있던 업계에서는 상상도 못할 대우를 받으며 회사를 다니고 있습니다. 우선 본인은 예술대학교에서 4년제를 취득한 예술학사로 배경이 개발과는 완전무관합니다. (다만 전공 특수성 때문에 이과랑 거리가 없지는 않습니다.) 졸업 후 행정 사무직으로 2년, 전공 관련 업무로 1년의 회사생활을 하면서, 비생산적인 일에 실증이 나 있었습니다. 업무를 더 잘하고 싶어서, 사무자동화와 파이썬, C/C++를 공부해서 업무에 자동화를 도입했지만, 본인의 성장과는 거리가 있었습니다. 2주 가까이 걸리던 작업을 1~2일로 시간..