본문 바로가기

전체 글43

[Swift] 프로젝트에 SRP와 CleanCode적용해보기 CleanCode는 소프트웨어 개발에서 가독성과 유지보수성을 높이기 위해 적용되는 개발 방법론입니다. CleanCode의 함수 파트를 읽으면서 제가 작성한 코드를 반성하게 되었는데요. 클린코드에서 함수를 깨끗하게 작성하기 위한 여러 방법들 중 가장 인상 깊었던 규칙 몇가지를 제 프로젝트에 적용해봤습니다. 가장 인상 깊었던 규칙 은 다음과 같습니다.1. 함수는 작게 만들어라2. 함수 내 모든 문장의 추상화 수준은 동일해야 한다3. 서술적인 이름을 사용해라4. 함수는 한 가지만 해야한다(SRP) 먼저 저를 반성하게 만든 문제의 코드를 보겠습니다.Beforefinal class WorkoutLogTableViewCell: UITableViewCell { var workout: Workout? { didSet .. 2023. 11. 12.
[Swift] Observable(UniCast) vs Subject(MultiCast) { Bind vs Drive } RxSwift를 공부하다 보면 Observable과 Subject가 나오는데 둘의 차이점이 무엇일까요?같은 Observable을 여러 Observer에서 구독했는데 어떤 경우에는 같은 값이 오고 어떤 경우에는 다른 값이 오는 이유는 무엇일까요?Subscribe와 Bind와 Drive의 차이는 무엇일까요? 오늘은 이 궁금증에 대해서 알아보도록 하겠습니다.Observable(UniCast)Observable은 RxSwift에서 사용되는 개념으로, 단일 값을 방출하는 일련의 이벤트 스트림입니다. Observable은 이벤트를 생성하고, 이벤트를 구독하는 Observer들에게 이벤트를 전달합니다. Observable은 하나의 Observer에게만 이벤트를 전달하는 UniCast 방식입니다. 예를들어 아래와 같은.. 2023. 11. 7.
[Swift] Queue 구현해보기 Swift에서는 Queue에 대해서 지원을 하지 않습니다.때문에 사용자가 직접 구현해줘야 하는데요.Queue를 알기 전에 간단하게 Stack에서 알아보겠습니다.Stack이란 무엇인가요?Stack은 LIFO(Last In First Out) 방식으로 동작하는 자료구조입니다. 예를 들어 편의점 냉장고에 음료를 채울 때, 앞에서부터 채우면 나중에 채운 음료가 먼저 나가고 처음 넣은 음료가 가장 마지막에 나가게 됩니다. Swift에서는 주로 Array를 사용하여 Stack을 대체해 사용할 수 있습니다.Array에 데이터를 append할 때, 데이터는 배열의 뒤에 쌓이게 됩니다. Array에서는 popLast() 또는 removeLast() 메서드를 사용하여 가장 마지막에 추가된 데이터를 제거할 수 있습니다. Q.. 2023. 11. 5.
[Swift] NavigationBar의 Title높이가 이상할때 원인 요약네비게이션 타이틀의 위치 문제가 발생했습니다.이 문제의 원인은 네비게이션 컨트롤러가 중첩되어 있었기 때문입니다.SceneDelegate에서 TabBarController를 NavigationController 안에 중첩했으며,TabBarController에서 FirstVC를 생성할 때도 NavigationController에 중첩되었습니다.이 문제를 해결하기 위해 나는 SceneDelegate에서 NavigationController를 제거하여 문제를 해결했습니다. 문제아래 (좌측) 뷰 컨트롤러의 Title이 살짝 아래로 내려가 있는 것을 확인할 수 있습니다.원래는 (우측) 뷰 컨트롤러처럼 Title이 상단에 가까워야 합니다.문제의 뷰컨트롤러 정상적인 뷰컨트롤러뷰 계층이상해서 뷰의 계층을 살펴봤습니다.. 2023. 10. 2.
[Swift] Realm 파일을 프로젝트 내부에 삽입하는 방법 및 사용하기 (파일 접근 에러) 요약실제 기기에서는 번들에 있는 Realm 파일에 접근할 수 없어서 파일 접근 에러가 발생합니다. 이를 해결하기 위해 앱이 실행 중일 때 Realm 파일을 앱의 documentDirectory로 복사하여 사용하는 방법을 사용할 수 있습니다. 이렇게 하면 파일에 대한 읽기 및 쓰기 권한이 부여되어 Realm 데이터베이스를 사용할 수 있습니다. 문제의 시작운동 기록 앱을 개발할 때, 운동 데이터베이스(DB)를 생성하여 앱에 삽입하여 사용하려고 시도해 보았습니다. Realm 파일을 만들어 프로젝트에 포함시킨 후 Bundle에 넣어 사용하면 되지 않을까 생각하여,Realm 파일을 Bundle에 넣었습니다. Bundle에 있는 파일을 사용하기 위해서는 다음과 같이 진행해야 합니다: App Targets → Bui.. 2023. 10. 1.
[Swift] UITabBarAppearance의 배경색은 어떤 차이가 있을까? UITabBarAppearance TabBar를 코드베이스로 구현하면서 궁금증이 생겼습니다. 탭바의 배경색은 어떻게 설정할 수 있고, 아래 세 가지 메서드의 차이는 무엇일까요? 세 가지 메서드를 비교해보면서 적용해보았지만, 비슷한 것 같으면서도 다른 것 같아서 한 번 분석해보았습니다. iOS 13.0+ configureWithDefaultBackground let appearance = UITabBarAppearance() appearance.backgroundColor = UIColor.systemYellow appearance.configureWithDefaultBackground() tabBar.standardAppearance = appearance print("backgroundColor: ",.. 2023. 9. 3.