· 성취/개선/학습한 내용 🏆 오늘은 의존성 주입과 의존성 역전 원칙에 대해서 학습을 했다. 우선 의존성이란 서로 다른 객체 사이에 의존 관계가 있다는 것을 말한다. 즉 다시 말하면, 의존하는 객체가 수정되면 다른 객체도 영향을 받는다는 것이다. 만일 의존성을 가지는 코드가 많아지면 어떻게 될까? 답은 재활용성이 떨어지게 되고, 코드를 수정할 때마다 매번 의존성을 가지는 객체들을 같이 수정해주어야 한다. 이런 의존성을 해결하기 위한 개념이 바로 의존성 주입이다. 그렇다면 의존성 주입을 하게 된다면 뭐가 좋을까? 위에서 언급한 코드의 재활용성을 높일 수 있고, 객체 간의 의존성을 줄이거나 없앨 수 있다. 또 Unit Test가 용이해지는 면도 있다. 그런데 의존성을 주입하는 것만으로는 의존성 주입이라고..
· 성취/개선/학습한 내용 🏆 오늘은 Unit Test에 대해 공부를 했다. Unit Test는 로직들을 테스트하는 것이기 때문에 UI Test보다 테스트 속도가 매우 빠르다. 그리고 해당 코드를 가져와서 테스트를 하는 데 사용해야 하기 때문에 @testable을 사용해야 한다. @testable을 사용하는 이유는 테스트를 할 비즈니스 로직과 Unit Test 파일은 서로 다른 모듈이기 때문이다. 그렇기에 비즈니스 로직 코드가 있는 모듈을 사용할 수 있게 import 해줘야 한다. 이때 비즈니스 로직 코드가 internal이라면 메서드나 class를 가져올 수 없다. 하지만 테스트를 위해서 접근제한자를 다 바꿔주는 것은 말이 안 된다. 이런 경우를 위해 @testable을 사용하면 internal이라도..
· 성취/개선/학습한 내용 🏆 오늘은 크게 2가지를 배웠다. 첫째로는 SwiftUI에서 UIKit을 래핑 하여 사용할 때, UIKit에서 사용하던 Delegate를 사용하고 싶을 때 사용하는 makeCoordinator이다. 아무래도 SwiftUI에선 delegate 없이 이미 만들어진 기능을 사용하다 보니, UIKit의 뷰객체나 뷰컨트롤러를 래핑 하여 사용하려면 makeCoordinator으로 세부적인 설정, 데이터 설정 등을 해줘야 한다. 두 번째로는 XCTest 중 UITest에 대해서 공부를 하였는데, UITest를 자동화하여 성공했는지 실패했는지 알려주는 역할을 한다. UITest는 잘하지 않는다고는 하지만, 신기하기도 하고 잘 사용하면 유용한 기능이라고 생각이 들었다. SwiftUIUIVie..
· 성취/개선/학습한 내용 🏆 SwiftUI의 Property Wrapper에 대하 많이 학습한 시간이었다. SwiftUI에서 뷰를 많이 나누면 MVVM이 필요 없을 수도 있지만 만일 MVVM 패턴을 사용한다면 뷰모델에 @State를 사용하여 변수를 선언하는 것은 어울리지 않는다. 그 이유는 @State라는 것이 오로지 뷰를 위해 존재하는 것이기 때문에 의미가 없다. 그래서 나온 프로퍼티 레퍼가 바로 @Published이다. 이를 위해선 뷰모델 class에 ObservableObject를 채택해줘야 한다. 그리고 @StateObject var viewModel = ViewModel()로 뷰를 구성하는 구조체 내에 선언을 해줘야 뷰모델에 선언한 변수를 가져다 사용할 수 있다. 여기서 @StateObjec..
· 성취/개선/학습한 내용 🏆 Swift 내에서 Sort가 어떻게 작동하는지 파악해 보기 위해 정렬에 대해서 학습을 하였다. 간단하게 설명해 보자면 버블정렬은 두 개씩 비교해서 큰 수를 뒤로 보내는 방법으로 정렬을 한다. 삽입 정렬은 카드 게임에서 패를 정리하는 것처럼 앞에서부터 정렬된 부분과 비교해 정렬을 하는 방식이다. (예를 들어 4 9 7 1 8이라면, 7이라는 수를 4와 9 사이에 넣는 것, 그 후 4 7 9 1 8이라면, 1을 맨 앞으로) 병합정렬은 데이터를 분할하고 다시 합치는 정렬 방식으로 재귀 알고리즘을 사용해야 해서 약간 어렵다. 마지막으로 퀵정렬은 pivot을 기준으로 작거나 같은 값, 큰 값으로 데이터를 재귀적으로 분리하는 정렬방식인데 나도 그 방법이 좀 어려워서 이해하기가 힘들다..
· 성취/개선/학습한 내용 🏆 네이버 맵을 활용 해서 앱을 만들고 있다. 이때 여러 뷰에서 네이버 맵을 사용하기에, 여러 맵에 똑같은 코드를 작성하기보단 좀 더 효율적으로 사용하는 방법이 없을까 고민이 됐다. 그 해결책으로 BaseMapView를 하나 만든 후 상속을 받아서 수정이 필요한 부분은 프로퍼티나 메서드를 호출해서 수정하면 된다. 다행히 이 방법으로 코드를 줄이면서 더 효율적으로 코드를 짤 수 있게 되었다. NaverMap APINaver GeocodingView 상속· 궁금한 내용과 부족한 내용 ⁉️🤔Naver Geocoding을 자꾸 시도해 보는데 401 statusCode가 계속 리턴되었다. 정말 2~3시간가량을 뭐가 문제인지 이것저것 다 바꿔보고 네이버에서 발급은 키..