본문 바로가기

반응형

분류 전체보기

(59)
SwiftUI LineBreakStrategy 적용기(UIViewRepresentable) 올해 2월 SwiftUI를 사용하는 스타트업에 취업 성공하고 바쁘게 지내고 있다취업 준비를 할 때는 UIKit 과 SwiftUI를 반 반 활용해가며 개발을 진행해갔는데 취업 이후에는 SwiftUI를 주로 사용하고 정말 필요한 경우에 UIKIt 기술을 가져와 사용하고 있다. 최근 회사에서 개발을 하면서 삽질을 했던 것들 중 하나가 LineBreakStrategy이다.  SwiftUI에서 Text에 줄바꿈을 하다보면 분명 단어가 더 들어갈 자리가 있음에도 줄바꿈을 하는 경우가 존재했다. 혹은 한 단어임에도 줄바꿈이 일어나는 경우가 존재했다. 이 UI는 단순화해서  다음과 같은 코드로 만들어졌다.  HStack(alignment: .center) { Text("비행기 안의 여행..
SwiftUI View 성능 향상을 위한 종속성 최소화하기 올해 WWDC23에 나온 영상을 보고 SwiftUI의 종속성, 그리고 퍼포먼스에 대해 고민을 하기 시작했다. SwiftUI는 구현이 UIKit보다 간편하게 구현할 수 있다는 장점이 있다. 하지만 그간 View의 성능이 향상되는 것에 대한 고민은 해보지 못했던 것 같다. 어떻게 성능향상을 이뤄낼 수 있을까? SwiftUI View는 기본적으로 데이터가 변화하면 화면을 다시 그리는 작업을 수행한다. 때문에 개발자는 어떤 데이터가 바뀐 뷰만 업데이트하고 싶을지 몰라도 데이터와 연결(종속 관계에 있는)된 다른 뷰가 업데이트 될 수 있다. 이러면 성능의 저하를 불러 일으킬 수 있다. 따라서 업데이트 횟수를 줄이는 것을 항상 염두해 두어야 한다. 여기서 업데이트 횟수를 줄이기 위해서 소개할 방법은 2가지이다. 첫 ..
클린 아키텍처(CleanArchitecture) 의존성 역전(DIP)에 대해 요즘 클린아키텍쳐 공부에 대한 필요를 느껴 객체지향, 클린아키텍쳐에 대해 공부를 이어나가고 있다. 오늘은 클린 아키텍쳐 전부에 대해서 설명하기보단 Domain Layer 부분 중 Repository Interface(protocol)을 중점적으로 다룰 예정이다. 그래도 기본적인 공부와 함께..! 그럼 클린 아키텍처를 공부하기 전에 아키텍쳐란 무엇일까? 아키텍쳐는 "구성과 동작원리, 구성 요소 간의 관계 및 시스템 외부 환경과의 관계를 설명하는 설계도"라고 할 수 있다. 그렇다면 아키텍처에 대해서 사람들은 왜 이렇게 중요하다고 할까? "클린 아키텍처"라는 책에서는 "기능"과 "아키텍쳐"에 두 가지에 대해서 도입부에 이야기를 한다. 지금까지의 나의 개발과정을 되돌아본다면 나는 "기능"에 초점을 맞췄다. '이..
[SPM 디자인시스템] 로컬 환경에서 테스트 해보기 최근 "스파클"이라는 프로젝트를 하면서 SPM을 활용해서 폰트, 색상, 디자인 시스템을 모듈화시키는 작업을 했다. 사실 SPM을 사용했지만 그냥 프로젝트 내에서 진행했을 때보다 장점이 있나? 라고 했을 때 명확한 답을 내리지 못했다. 만약 현재의 디자인 시스템을 가지고 관리자 앱? 이라든지 다른 프로젝트를 진행한다고 했을 때 바로 패키지를 추가하면 되니까 장점이 있을지도?? 아무튼 우리가 하나의 프로젝트와 하나의 패키지 매니저, 즉 두 개의 파일을 만들어서 작업을 했는데 우리의 워크 플로우는 다음과 같았다. (SPM으로 디자인 시스템을 만들고 수정사항이 발생했을 때) 디자인시스템에서 수정할 것이 생기면 패키지 매니저에서 대놓고 바꿀 수 없었다! 왜냐면 연결되어 있는 프로젝트가 있어야 잘 수정이 되어있는지..
[RealmSwift Test] "오운완" Mock을 활용한 Realm 테스트 요즘 테스트 공부를 한창 하고 있다. realm를 테스트할 때 실제 realm객체에 접근하고자 하면 테스트 간 일관성이 유지되지 않는다고 한다. (음..실제로 가짜 객체를 두지 않고 테스트 코드를 돌려봤을 때 RealmStudio에는 사실 반영이 되지 않았다. 그치만 또 이미 있는 데이터라고 나타나서 테스트도 되지 않았다.. 영향을 주는 것 같기도 주지 않는 것 같기도..더 알아볼 필요가 있을 것 같다.) 그래서 테스트용 가짜 객체를 만드는데 이것을 "Mock"이라고 한다. 실제 서비스에는 ProductionRealm, 테스트에는 MockRealm 이렇게 구분했다. 우선 프로토콜을 사용해서 RealmProvider(어떤 Realm을 제공해줄지) protocol RealmProviderProtocol { ..
[Swift Unit Test] "오운완" 효과적인 테스트를 위한 고민(코드 재사용) 최근 고민했던 내용들을 본격적으로 얘기하기 전에 MVVM패턴과 MVC패턴의 차이에 대한 고민으로부터 시작되었다. 현재 나는 MVC패턴과 MVVM패턴으로 진행중인 프로젝트가 1개씩있다. 그래서 자연스럽게 차이에 대해서 고민하게 되었다. MVC패턴은 Model + View + Controller 구조이다. 결과적으로 뷰를 보여주고 관리하기 위한 로직들이 모두 ViewController 안에 있다. MVVM패턴은 Model + View + ViewModel 구조이다. MVC 패턴과의 차이에 대해선 이제 ViewModel이라는 계층을 하나 더 만들어서 로직을 따로 관리한다는 것이다. 그러면 굳이 왜 ViewModel을 따로 만들고자 했을까? 보통 MVC 패턴에서 ViewController가 비즈니스 로직 말고도..
[Swift error handling] "스파클" 예상 못한 에러는 어떻게 처리해줘야 할까? "스파클" 앱을 리펙토링하는 과정에 있다..! 2주간 프로젝트를 진행하면서 마지막에 해결되지 않은 이슈가 있다. 바로 "커플 연결에 혼선이 있으면 API 호출을 통해 받아오는 커플 정보를 정확히 받을 수 없다." 는 것이다. 문제 상황 API 호출 전 indicator 실행 -> API 호출 -> 성공 시 indicator 그만 인 흐름에서 성공하지 못했기 때문에 indicator가 무한으로 도는 문제가 발생하고 있었다. 사실 나는 그 전까지 "물론 에러 핸들링 중요하지만! 그 전에 이러한 에러가 나지 않아야 한다"라고 생각해서 에러 처리를 굳이 만들지 않았었다. 그치만 이러한 현상을 겪으면 다시는 앱을 사용하지 않게 될 것 같다라는 생각에 우선 서버의 상태와는 별거로 iOS 앱에서 에러 핸들링을 해보고..
"스파클" 프로젝트 회고(SOPT iOS 32기) 마지막 대학 생활 동안 정말 해보고 싶었던 SOPT 활동이 끝났다. iOS 파트에 들어오고 같은 파트 사람들은 정말 잘하는 사람부터 처음 개발 공부를 하기 시작하는 사람까지 다양하게 있었다. 그리고 느낀 것은 "정말 하기 나름"이라고 생각이 들었다. 정말 아무것도 모르는 상태에서 동아리 활동을 시작해서 질문하는 것에 거부감이 없고 항상 노력하는 친구는 마지막이 되어서 누가봐도 정말 많이 성장해 있었다. 그런 친구들을 보면서 나 역시 많은 동기부여를 얻었고 함께 공부하면서 많이 배울 수 있었던 것 같다. 주차 별 세미나가 끝나면 기획, 디자인, 서버, 클라이언트 개발자가 함께 프로젝트를 진행한다. SOPT에서 최종으로 진행하는 프로젝트는 '앱잼'이라고 한다. 나는 '앱잼' 동안 "스파클"이라는 앱을 만들었..

반응형