Dev/고민과 삽질의 기록들🤔22 팀내 테스트 코드 문화 도입 과정 (Unit test의 본질 재정립) 오랜만에 아티클로 다시 돌아왔습니다. 연말에는 몇일정도 잠시 휴식기간도 가졌고, 새해초부터는 알고리즘 캠프에 들어가서 빡세게 과제들을 하느라 정신이 하나도 없었네요..ㅎㅎ 그래도 이번주부터는 다시 포스팅도 힘내서 써볼 동기부여되는 일들도 있었기에 다시 열심히 해보겠습니다. 오늘 글의 주제는 테스트 코드입니다. 항상 관심이 많았던 주제인데 최근에 좀 새로운 인사이트를 얻게 되어서 아직 팀내에서 명확한 결론이 난 주제는 아니지만 그 과정이 의미있어 이에 대해서 정리해보고자 합니다! 1. 배경저는 MVC로 시작한 프로젝트를 최종적으로 MVVM-C의 형태로 리팩토링을 진행한 경험이 있습니다. 그리고 그 모든 과정을 관통하는 것이 바로 "Testable한 객체"입니다. Testable한 객체를 만들기 위해 객체간.. 2024. 1. 8. Hashing (Dictionary의 키는 왜 Hashable 타입인가요?) 이번글의 목표 Dictionary의 키는 왜 Hashable 타입인가요? 왜 Dictionary/Set의 탐색은 O(1)인가? 왜 Dictionary 탐색의 최악의 경우는 O(n)인가? Hashable의 hashValue는 왜 Int 인가? Hashing을 왜 하는가? 좋은 해싱 알고리즘이 필요한 이유는? https://soojin.ro/blog/hashable 이번 글의 목표는 위의 질문들에 답변하는 것이 목표입니다. 바로 답을 하진 않을거고, Hashing에 대해서 쭉 살펴본 후에 Swift에서의 hash table 충돌 해결방법을 알아보고, 해당 방법으로 직접 Dictionary를 구현해본 후에 질문에 답을 해보도록 하겠습니다! 레츠고 만약 답변만 보고싶으시다 하시면 쭈욱 내려가서 맨 아래쪽 '답변.. 2023. 12. 15. Self-deallocating Coordinator Pattern으로 변경 이유 기존 프로젝트에서 Coordinator Pattern을 적용해서 ViewController로부터 화면전환에 대한 책임을 분리시켜주고 있었습니다. 그리고 오늘 하나의 의문점을 바탕으로 기존의 Coordinator Pattern방식에서 조금 변형된 Self-deallocating방식으로 변경하기로 결정했습니다. 오늘은 그 결정을 내리기까지의 과정을 한번 정리해보고자 합니다. 꽤나 두서없는 글이 될 수도 있을 것 같지만 한번 가봅시다. 사건의 발달 protocol Coordinator : AnyObject { var parentCoordinator: Coordinator? { get set } var children: [Coordinator] { get set } var navigationController .. 2023. 12. 14. Async/await와 Combine 함께 쓰기 (Network Layer) async await를 통해서 구축되어있는 프로젝트 환경에서 저희는 Combine과 async await을 함께 쓰기로 결정하였습니다. 그 이유인 즉, async await과 Combine은 각각의 명확한 장점을 가진 방법들이었고, 그 장점들을 모두 얻고자 하였기 때문입니다. async await의 경우 Swift Concurrency를 본격적으로 활용해서 비동기 로직을 보다 효율적으로 사용할 수 있는 장점이 있었고, 이를 통해서 얻은 데이터를 Observing하다가 UI에 반영해주기 위해선 Observing에 특화된 Combine을 사용하여 그 장점을 얻을 수 있었습니다. 이 이유에 대한 이야기는 아래 글에서 조금 더 자세히 다루고 있습니다. https://codingmon.tistory.com/70 .. 2023. 12. 5. 이전 1 2 3 4 ··· 6 다음