TCA 내부 코드를 살펴보면 기본적으로 struct로 구현되어 있는 것을 볼 수 있다.struct로 구현함으로써 아래와 같은 장점을 가질 수 있다.Struct 사용의 장점불변성이 보장된다.복사로 인한 상태 변화 추적이 용이하다.스레드 간 공유 시 자동으로 복사되어 안전하다.참조가 아닌 값으로 동작하므로 사이드 이펙트가 감소한다.하지만 struct를 사용함으로써 스택 오버플로우와 같은 중요한 단점도 발생할 수 있다. https://github.com/pointfreeco/swift-composable-architecture/discussions/3147https://medium.com/@lot32nao/stack-overflow-due-to-memory-exhaustion-from-recursive-nav..

// UIView+Extension.swift // Journey import UIKit extension UIDevice { var hasNotch: Bool { let bottom = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0 return bottom > 0 } } 디바이스가 노치가 있는 것인지 없는 것인지 판별하기 위해 Extension으로 따로 빼서 만듦. // ChallengeViewController.swift // Joureny notchCase 라는 함수를 만들어 주었고 (viewDidLoad에 넣어줌) 옆에 이미지에서 보이듯이 노치가 있을 때는 스탬프가 삼각형 구조로 배열되어 있고, 노치가 없을 때는 스탬프가 일렬로 배열되어 ..
UIKit 프레임워크 UIKit은 iOS 애플리케이션 개발시 사용자에게 보여질 화면을 구성하고 사용자 액션에 대응에 관련된 다양한 요소를 포함 애플리케이션을 구현할 때 필수적인 부분이다. UIKit 소개 UIKit은 iOS 애플리케이션의 사용자 인터페이스를 구현하고 이벤트를 관리하는 프레임워크 UIKit 프레임워크는 제스처 처리, 애니메이션, 그림 그리기, 이미지 처리, 텍스트 처리 등 사용자 이벤트 처리를 위한 클래스를 포함 테이블뷰, 슬라이더, 버튼, 텍스트 필드, 얼럿 창 등 애플리케이션의 화면을 구성하는 요소를 포함 UIKit 클래스 중 UIResponder에서 파생된 클래스나 사용자 인터페이스에 관련된 클래스는 애플리케이션의 메인 스레드(혹은 메인 디스패치 큐)에서만 사용 UIKit은 iOS와 ..
AVFoundation AVFoundation은 Apple 플랫폼에서 사운드 및 영상 미디어의 처리, 제어, 가져오기 및 내보내기 등 광범위한 기능을 제공하는 프레임 워크 주요 기능 미디어 재생 및 편집 디바이스 카메라와 마이크를 이용한 영상 녹화 및 사운드 녹음 시스템 사운드 제어 문자의 음성화 AVAudioPlayer Class AVAudioPlayer 클래스는 파일 또는 메모리에 있는 사운드 데이터를 재생하는 기능을 제공 AVAudioPlayer 주요기능 파일 또는 메모리에 있는 사운드 재생 (네트워크에 있는 사운드 파일은 재생 불가) 파일 재생 시간 길이의 제한없이 사운드 재생 여러 개 사운드 파일 동시 재생 사운드의 재생 속도 제어 및 스테레오 포지셔닝 앞으로 감기와 뒤로 감기 등의 기능 지원해..
Commit Type 1.feat 새로운 기능 추가 (new feature) 2.fix 버그 수정 (bug fix) 3.docs 문서 작성, 수정 (documentation) 4.style 코드 포맷팅, 세미콜론 누락 등 코드 변경이 없는 경우 5.refactor 코드 리팩토링 (refactoring) 6.test 테스트 코드, 리팩토링 테스트 코드 추가 7.chore 빌드 업무 수정, 패키지 매니저 수정 등 (production code 변경이 없는 경우) 8.perf 성능 개선 Issue Title [Commit Type] 이슈 제목 그리고 Commit Type 라벨, 각자 이름 라벨 추가 이슈 body는 체크리스트 타입으로 작성. 비워두진 말기 커밋 메세지 Description [#이슈번호] 해당 ..
Git-Flow main 제품으로 출시될 수 있는 브랜치, 배포 Release(Prod) 버전의 소스가 들어있는 branch 기본적으로 github 저장소를 생성하면 있는 branch이다. 배포이력을 관리하기 위한 용도로 사용한다. develop 다음 출시 버전을 개발하는 브랜치, 개발버전의 소스가 들어있는 branch 일반적으로 Master branch에 병합하기 전 최종 개발버전의 소스가 들어있다. 다음 Release될 버전의 소스라고 생각하면 된다. feature 기능을 개발하는 브랜치 개발자들이 기능개발을 위하여 생성/이용 하는 branch이다. 개발이 완료되면 develop와 병합하여 다른 사람들과 공유한다. release 이번 출시 버전을 준비하는 브랜치 hotfix 출시 버전에서 발생한 버그..
* 마크주석 **// MARK: - Properties** **// MARK: - @IBOutlet Properties** **// MARK: - @IBAction Properties** **// MARK: - View Life Cycle** viewDidLoad(), viewWillAppear()... **// MARK: - Functions** **// MARK: - Extensions** **// MARK: - UITableViewDataSource** **// MARK: - UITableViewDelegate** 프로토콜들 Extension 으로 빼기 * 함수 네이밍 서버통신 서비스함수명 + WithAPI IBAction 동사원형 + 목적어 ex) touchBackButton 뷰 전환 pop, p..

Interface Builder Annotation interface Builder를 줄여서 IB라고 붙이며, Outlet은 콘센트 개념, Action은 동작 개념 @IBAction 유저의 특정 이벤트 (터치, 드래그, 편집 등등) 감지해서 Controller에게 알리는 역할 특정 이벤트 발생 시 실행될 동작들을 정의 @IBOutlet 처리 결과를 View에 알리고 원하는 동작을 이끔 View에 존재하는 요소와 Controller를 연결하기 위한 변수 개념 * @는 At Symbol의 뜻으로 코드 자체의 특성을 가리킬 때 사용한다. 컴파일러에게 "나는 어떤 속성이야!" 라고 전하는 역할을 하는 예약어이다. 화면 전환 모달 특정 위치를 누르면 새로운 창이 기존 창 위에 뜨는 것 사용자의 이목을 끌기 위해 ..

viewWillAppear 뷰가 계층에 추가되고 화면이 표시되기 직전에 호출되는 메서드 화면이 나타날때마다 수행해야 하는 작업을 하기 좋은 시점 viewDidAppear 뷰가 계층에 추가되고 화면이 표시되기 직전에 호출되는 메서드 화면이 나타날때마다 수행해야 하는 작업을 하기 좋은 시점 viewWillDisappear 뷰가 계층에서 사라지기 직전에 호출되는 메서드 뷰가 생성된 뒤 발생한 변화를 이전 상태로 되돌리기 좋은 시점 viewDidDisappear 뷰가 계층에서 사라진 후 호출되는 메서드 1. viewDidLoad 뷰계층이 최초 메모리에 로드 된 후 호출되는 메서드 메모리에 처음 로딩 될 때 1회만 호출된다. 2. viewWillAppear 다른 뷰에 갔다가 다시 돌아오는 상황에 해주고 싶은 처리..