TripStyle에서는 TabBarController에서 3개의 탭을 관리하고 있고, 로그인 플로우까지 총 4개의 화면들이 이어진다. 탭바 아이템을 클릭했을 때 각각의 모듈의 시작점이 호출되는데, Coordinator 패턴을 통해서 이를 관리하는게 좋을 것 같다고 생각했다. 모듈간 의존성을 살펴보면 App (SceneDelegate, AppDelegate) -> Feature (ViewController, ViewModel을 가지고 있는 모듈) 이런 방향으로 되어 있는데, 고민해야 할 부분이 각 화면들의 Coordinator의 적합한 위치와 TabBarCoordinator, AppCoordinator, Coordinator Protocol 들에 대한 위치이다. TabBarCoordinator, AppCo..
01. RxSwift + MVVM-C로 되어있는 프로젝트를 Combine, Clean Architecture, Tuist로 마이그레이션 계획을 세웠다. RxSwift를 걷어내고 싶은 이유는 다음과 같다.. 1. ThirdParty이기 때문에 애플에서 권장하는 FirstParty인 Combine 프레임워크를 사용해보고 싶었다. 2. 이미 다른 프로젝트들에서 RxSwift(잘 사용하지는 않지만,,)를 사용해본 경험이 있어 Combine을 선택한 이유도 있다..! 3. 마지막 이유는 SwiftUI와 데이터 바인딩에 유리하다는 이야기를 듣고,, (언젠간 사용할 예정) 선택하게 되었다.. 결론은 써보고 싶어서,, 이게 가장 큰 이유 ,,! 다음으로 Tuist를 적용한 이유는..! 1. .xcodeproj 파일로 ..
1. 옵셔널 바인딩 guard라 하면 어떤 것이 가장 먼저 떠오르시나요? 저는 옵셔널 바인딩에서의 guard let 구문이 가장 먼저 떠오르는데요 ! ! ! 먼저 옵셔널 바인딩에서의 guard에 대해 간단하게 살펴볼게요! Optional String의 파라미터를 가지는 함수를 하나 만들었습니다. 첫 번째 이미지에서 함수를 호출하니 입력한 email을 Optional 상태로 받았습니다. 두번째 이미지에서는 guard let 구문을 통해 옵셔널 바인딩을 하여 안전하게 email을 받을 수 있었습니다. guard let 옵셔널을 벗겼을 때 nil이면 더 이상 코드를 실행시키지 않겠다는 의미가 강함 -> nil이 아닐 때만 관심을 갖겠다. 선언된 변수를 아래문장에서 사용 가능 (동일한 스코프로 취급) 이러한 특..
오늘은 inout 파라미터에 대해 알아보겠습니다! inout 파라미터를 알아보기 전에 먼저 알아야 할 것이 있습니다! 값 타입, 참조타입, 메모리인데요! 간단하게 살펴보고 inout 파라미터에 대해 살펴보겠습니다! 혹시 구조체는 값 타입, 클래스는 참조타입 들어보셨나요? 너무나 유명한 얘기죠 .. 그렇다면 값 타입은 무엇이고 참조 타입은 무엇일까요? 그 전에 메모리의 구조에 대해서 간단하게 살펴보겠습니다! 메모리는 코드, 데이터, 힙, 스택 총 4개의 구역으로 나누어 사용합니다!! 코드(프로그램)에는 앱의 모든 코드가 존재합니다. 데이터는 전역변수 / 타입(static/class)변수가 존재하며 앱이 실행되는 동안 불변합니다. 힙은 동적할당을 위한 영역이며 크기가 크고, 개발자가 잘 관리할 필요가 있는 ..
오랜만에 블로그 포스팅이네요. . 현실에서 벗어나 힐링도 좀 하고 . . 하느라 소홀했네요 . . 다시 갓생을 살아보겠습니다. . 오늘은 switch문과 where에 대해 살펴볼 예정입니다! 그 전에 if문에 대해 간단하게 살펴볼게요! 대게 조건문이라고 하면 If문과 switch문이 떠오를 것입니다! if문은 참과 거짓을 판단할 수 있는 문장을 조건으로 넣고 해당 조건이 만족한다면 중괄호 안에 코드를 실행합니다. seungchanAge라는 변수를 조건문에 넣고 true이면 정답ㅋㅋ이 나올 것이고 아니라면 else를 추가해 else 중괄호 안에서 처리할 수 있겠죠? 따라서, if문을 사용할 때에는 논리적은 구조 및 조건의 순서가 중요하다. 여러가지 조건을 한번에 처리할 수 있다. (&&, ||) 중첩해서도..
소복소복에서 MVVM과 RxSwift를 녹여보겠다는 다짐을 하고 공부를 하고 있는데요! 제가 설계한 뷰의 구조와 Rx를 사용한 CollectionView 만드는 법에 대해 포스팅 하려고 합니다. (아직 공부하고 있는 단계라 많이 부족하니 .. ) 우선 위와 같이 뷰를 잘게잘게 나눴습니다. 뷰를 나누면서 고민한 것은 버튼의 모듈화, 재사용 뷰 이 2가지 입니다. NavgatiionBar같은 경우 다른 뷰에서 계속 사용이 됩니다. 따라서 NavigationView라는 클래스를 새로 만들어 뒤로가기 버튼, 약 전송하기, 취소 컴포넌트를 넣어 재사용할 수 있게끔 만들었습니다. 버튼 같은 경우는 SobokButton이라는 새로운 CustomButton을 만들어 enum에 따라 사용할 수 있게끔 하였습니당. (추후..
요즘 들어 제가 사용하는 코드들에 대한 의미를 알고 쓰는 것이 맞는지, 왜 쓰는 것인지 에 대한 의문이 듭니다.. 그 중 하나가 private 키워드인데요. 프로젝트를 진행하면서 private 키워드를 붙여서 파일 내 변수나 함수를 만들었습니다. 코드리뷰 단계에서 특히 이 부분을 유심하게 체크하기도 하고 새삼 중요하다고 생각을 했었습니다. 그러던 중 왜 써야하나? 라는 의문이 들었고 아 부분에 대해 정리를 해보려고 합니다. (private를 포함해서 접근제어자는 다양한 키워드가 있지만 포괄해서 정리를 하겠습니다.) private 비공개 접근수준은 가장 한정적인 범위이다. 비공개 접근수준으로 지정된 요소는 그 기능을 정의하고 구현한 범위 내에서만 사용할 수 있다. 비공개 접근수준으로 지정한 기능은 같은 소..
lazy 키워드를 정리하게 된 이유는 코드로 UI를 작성하면서 궁금증이 생겨서입니다. 친구와 let과 private lazy var 둘의 차이점이 무엇일까에 대해 얘기를 나눴었는데 정리하면 좋을 것 같아서 정리를 해봅니다! 우선 간단하게 터치를 할 수 있는 버튼을 만들어보겠습니당 let letButton = UIButton().then { $0.addTarget(self, action: #selector(letButton), for: .touchUpInside) } private lazy var lazyButton = UIButton().then { $0.addTarget(self, action: #selector(lazuyButton), for: .touchUpInside) } 요 둘의 차이가 가장 큰..
@main에 대해 작성하게 된 이유는 AppDelegate와 SceneDelegate의 역할과 기능을 공부하면서 궁금한 것들이 많이 생겨서 입니당 2021.09.29 - [SSAC - iOS] - [SSAC - iOS] 09월 28일 TIL [SSAC - iOS] 09월 28일 TIL 1. 앱의 구조와 동작 원리 화면 기능 데이터 데이터가 앱 내부에 저장이 되어 있을 경우 : 백업/복구 필수 (ex. 혼자 사용하는 투두, 일기, 영화 관리 앱 등) 데이터가 서버에 저장이 되어 있을 경우 seungchan.tistory.com 기존에 간단하게 포스트했었는데 다시 한 번 정리해보겠습니다. (다음 글에서는 AppDelegate와 SceneDelegate에 대해 작성해보겠습니다.) 프로젝트를 생성하면 기본적으로..
diggin을 개발하면서 생긴 이슈를 정리하기 전에 diggin 회고를 해보려고 한다. 오늘 기준으로 diggin은 앱스토어 심사 대기중이다! 앱스토어에 출시되면 링크를 걸어 놓겠다. Let's diggin! diggin에 대해 간단히 소개하자면 오늘 하루 들은 음악을 기록하고 다양한 LP와 diggin의 플레이리스트를 받아볼 수 있는 앱이다. 나는 평소 음악 듣는 것과 소위 디깅이라 말하는 보석같은 음악을 찾아 듣는 것을 좋아한다.. 이러한 다소 황당한 이유가 diggin을 기획한 가장 큰 이유가 아닐까 싶다. 말 그대로 좋아하고 내 서비스를 오래오래 애정할 수 있는.. 마지막 이유로는 대략 일 년 전부터 LP를 모으기 시작했다. LP를 모으면서 현재 LP 커뮤니티가 흩어져 있는 느낌을 받았고 그러다 ..