[Swift] [Error Handling] Result Type
·
Swift/정리
ResultType In SwiftSwift에서 Result Type은 성공 혹은 실패로 끝날 수 있는 작업을 관리하기 좋은 Tool이다.예를 들어 네트워크 요청을 하는 함수를 실행한다면 실행 결과가 성공시 요청한 데이터를 캡슐화하고 실패시 오류를 캡슐화할 수 있다.Result Type을 사용하면 예상 경과를 보다 명확하게 정의할 수 있어 가독성과 유지보수성을 향상 시킬 수 있다.그래서 Swift에서 오류 처리를 개선하기 위해 도입이 되었다고 한다.Swift에서 Result Type은 성공과 실패 즉, 두가지 경우가 Enum 역할을 한다.성공은 성공 시 기대되는 값이 되고, 실패는 발생하는 오류 값이 된다.ResultType SyntaxSwift의 결과 유형은 기본적으로 해당 값으로 성공을 나타내거나 관..
[SwiftUI] TCA(The Composable Architecture)이란?
·
Swift/정리
안녕하세요 불망입니다, 이번에 사이드 프로젝트를 진행하게 되었는데 iOS 부분을 모두 혼자 담당하게 되었습니다 이번 프로젝트에서 TCA + Tuist + Combine을 활용하려고 합니다. 직접 사용해보면서 어떤 장점이 있고 어떤 단점이 있는지 알아보려고 합니다. 오늘은 TCA 패턴에 대해 간단하게 서치해봤습니다. 디자인 패턴 코드가 특정 문제를 해결할 때, 정형화된 하나의 규칙을 제안하는 것 아키텍처 패턴 정리된 코드들을 더 추상화된 비즈니스적 문제 해결 관점으로 정리하는 규칙 TCA 패턴 The Composable Architecture을 활용한 아키텍처 패턴에 대해 설명 SwiftUI는 선언형 UI로 구현하는 환경에서 MVVM 패턴이 자주 사용되었습니다. 그 외 비즈니스 로직, 기업의 개발 환경 및..
[SwiftDataStructure&Algorithms] 기본 데이터 구조(세트, 튜플)
·
Swift/정리
세트 선언 세트는 서로 중복되지 않고 unique, nil이 포함되지 않ㅇ느 non-nil 순위를 정의할 수 없는 무순위 컬렉션이다 세트는 형식상 Hashable 프로토콜에 부합, 스위프트의 모든 기본 타입은 기본적으로 Hashable 프로토콜을 따르도록 설계 열거형의 case값 역시 기본적으로 Hashable 프로토콜을 따른다. 세트에는 여러분이 만든 커스텀 타입도 저장할 수 있는데, 이때 Hashable 프로토콜과 Equatable 프로토콜에 부합해야만 함, Hashable은 Equatable을 상속한 프로토콜 순위가 중요치 않은 배열이라면 해당 데이터를 세트로 저장해도 큰 차이가 없으며, 이때는 해당 요소가 서로 중복되지 않도록 해야함 세트는 배열에 비해 매우 효율적이며, 데이터 접근 속도 역시 세..
[SwiftDataStructure&Algorithms] 기본 데이터 구조(배열, 딕셔너리)
·
Swift/정리
스위프트 표준 라이브러리 활용 표준 라이브러리의 개념은 무척 넓고 다양하다 라이브러리에서 정의한 다양한 프로토콜을 적용할 수 있는 버용 구조체와 열거형을 통해 다양한 기능 제공 Array.append() 함수 예시 해당 배열의 저장 내용을 다른 뱅려과 실시간으로 공유하지 않을 경우 알고리즘의 복잡성 $O(1)$만큼 커짐 함수 실행을 위해 해당 배열을 브릿징한 NSArray로 래핑해야 하며, 그렇지 않을 경우 알고리즘의 효율성은 매우 낮아짐 애플이 구조체를 사용하는 이유 객체지향형 언어를 이용해서 프로그래밍을 했다면, 원하는 타입을 만들기 위해 클래스라는 구조 또는 개념을 사용해 왔을 것 하지만 스위프트 표준 라이브러리에서는 이와 같은 용도로 클래스를 사용하지 않음 스위프트에 정의된 타입 대부분은 구조체 ..
[SwiftDataStructure&Algorithms] 데이터 구조
·
Swift/정리
1강 플레이그라운드 살펴보기 데이터 구조의 중요성 효율성 유지 보수성 확장성 데이터 활용을 위한 체계화 방법 (데이터의 공유,유지,정렬,검색 등) 데이터 구조 + 알고리즘 = 프로그램 데이터 추상화(abstraction)기법 데이터가 지닌 복잡성을 관리하기 위한 기술 데이터 구조를 디자인 추상화를 사용하는 이유 내부의 구현방식을 몰라도 되도록 하기 위함, 개발자는 더욱 쉽게 사용할 수 있다. 문제를 해결하기 위한 패턴 스위프트 REPL 스위프트 컴파일러(Read-Eval-Print-Loop) 즉시 코드를 실행하고 결과를 도출 값을 별도로 할당하지 않았을때 REPL이 직접 $R0라는 변수를 생성해서 값을 할당 기본적인 데이터 구조 배열 & 포인터 인접 데이터 구조: 데이터 메모리 영역중 인접한 부분에 저장..
XCODE IOS 프로파일링 디버깅 하는 방법
·
Swift/정리
안녕하세요 불망입니다..! 개발을 하다보면 어플이 멈추거나 강제종료되는 경우가 있습니다..! :( 그 이유로는 메모리 부족이나 누수이거나 교착상태, 경쟁 상태 등 다양한 이유가 있을 수 있습니다. 정확한 원인 분석을 하기 위해서는 프로파일링을 하거나 디버깅을 해야합니다. 메모리 누수나 부족 교착상태 등등을 찾아보려면 프로파일링해보는 것이 제일 정확한 방법입니다. 1. XCODE 프로파일링 XCODE 프로파일링이란 앱 성능 및 리소스 사용을 분석하고 최적화하는 과정을 뜻합니다. 앱이 실행하는 중에 발생하는 이슈에 대해서 모니터링 할 수 있고 메모리누수, 에너지효율성, 메모리할당 과정 등을 전반적으로 훓어볼 수 있습니다. 단순 출력으로는 잡아내기 힘든 성능 이슈나 메모리 부분을 주로 관찰 및 분석합니다. 디..
[SwiftUI] 아키텍처 고민
·
Swift/정리
아키텍처 Toucher 개발을 리펙토링 하면서 제일 먼저 한 고민은 "어떤 아키텍처를 해야하는 것인가,,?" 이었습니다. 일단 저희한테 맞는 아키텍처를 찾으려면 어떠한 아키텍처가 SwiftUI 에서 사용이 되는지 알아봤어야 했기에 간단하게 서치를 해봤습니다. MVC Model-View-Controller 주로 UIkit에서 이용을 합니다. SwiftUI에서는 아래와 같은 이유로 사용을 지양하고 있습니다. SwiftUI는 선언적인 구문을 사용하여 UI를 정의합니다. 원하는 결과를 선언하고 프레임워크가 알아서 상태 및 레이아웃을 관리합니다. SwiftUI는 바인딩(Binding) 및 상태 속성(State Property)과 같은 반응형 프로그래밍 개념을 도입하여 UI 요소를 데이터에 쉽게 바인딩할 수 있습니..
[SwiftUI] Combine - 기본
·
Swift/정리
Combine을 쓰면 좋은 이유 아래 코드 예시는 로그인을 할때 userId와 userName을 가져올때 사용할 수 있는 코드이다. switch case를 사용하며 값이 두개 밖에 처리 할 것이 없을때는 사용 가능하겠지만 값이 점점 많아지고 복잡해지면 switch case를 이용해서 하기 어려워질 것이다. func fetchUserId(_ completionHandler: @escaping (Result ) -> Void){ DispatchQueue.main.asyncAfter(deadline: .now() + 2) { let result = 24 completionHandler(.success(result)) } } func fetchName(for userId: Int,_ completionHandl..
[SwiftUI] Combine
·
Swift/정리
Combine Framework 시간에 따라 값들을 처리하기 위한 선언적인 Swift API 시간에 따라 변할 수 있는 값으로 노출하기위해 publisher를 선언합니다 publisher로부터 받아오기 위한 subscriber를 선언합니다. publisher는 시간에 따라 일련의 값을 전달할 수 있는 타입을 선언하며, 연산자를 사용하여 상위 발행자로부터 받은 값을 처리하고 다시 발행할 수 있습니다. subscriber는 publisher로부터 이벤트를 얼마나 빨리 받을지 제어 할 수 있습니다. 텍스트 필드의 업데이트와 URL 요청, 응 답 처리 등을 조율할 수 있습니다. 코드를 더 읽기 쉽고 유지 보수하기 쉽게 만들 수 있습니다. 이벤트 처리 코드를 중앙 집중화하여 중첩된 클로저 및 규약 기반 콜백과 같..
[Swift] SwiftLint
·
Swift/정리
SwiftLint가 뭘까? 회사나 팀에서 정한 스타일 규칙을 따르지 않는 코드를 확인하고 표시하는 것을 도와줘요. 일관된 코드를 작성하는데 도움을 주는 역할을 해요. 공식 Swift 언어 문서와는 직접적인 관련이 없어요! SwiftLint를 사용하는 이유는?? 1. 신경이 분산되지 않고 중요한 것에 집중 모든 Swift 코드가 일관성을 유지하도록 하기 위해서! 새로운 개발자가 합류하거나 예전 코드를 읽을 때 읽기 쉽도록 도움을 줍니다. 이렇게 일관적으로 코드를 작성하면 어떤 코드가 파일의 다른 부분과 비교해서 문법이 이상한 부분을 찾는 역할을 한다고 해요 2. 프로젝트간 일관성 유지 개인 프로젝트, 회사 프로젝트 혹은 전체 Swift 커뮤니티간에도 일관성 유지가 필요해요 한 프로젝트에서 SwiftLint..
[SwiftUI] NavigationStack
·
Swift/정리
기존 네비게이션 NavigationLink("Details", isActive: $item.showDetail) { DetailView() } 새로운 네비게이션 API Navigation의 새로운 종류 NavigationStack 새로운 시스템 설정 앱, 애플워치 앱 등 (푸시 팝 인터페이스) NavigationStack(path: $path) { NavigationLink("Details", value: value) } NavigationSplitView Mail 또는 Notes와 같은 다중열 애플리케이션에 적합 iPhone, iPad의 SlideOver, AppleWatch와 Apple TV의 단일 열 스택에 자동으로 적응 NavigationSplitView { RecipeCategories() } ..
[Swift] 기본 문법 정리
·
Swift/정리
이름짓기 규칙 기본적으로 카멜 케이스 사용 Lower Camel Case: fuction,method,variable.constant Upper Camel Case: type(class,struct,enum,extension) 콘솔 출력 print 단순히 문자열 출력 dump 인스턴스의 자세한 설명(description property)까지 출력 문자열 보간법 String Interpolation 프로그램 실행 중 문자열 내에 변수 또는 상수의 실질적인 값을 표현하기 위해 사용한다. \( ) import Swift let age: Int = 10 "안녕하세요 저는\\(age + 5)살입니다!" Any, AnyObject, nil Any Swift의 모든 타입을 지칭하는 키워드 어떤 타입도 수용 가능합니다..
[Swift] 첫 iOS 앱 개발자를 위한 가이드 from Lingo
·
Swift/정리
Intro 안녕하세요 bulmang입니다~! 오늘은 Lingo가 설명해주신 내용을 따로 정리하여 공유하고자 합니다! 내용은 iOS 개발이 처음이신 분들을 위한 내용으로 한번 참고 하시면 좋을 것 같습니다. apple은 생각보다 다양한 사이트를 가지고 있습니다. https://www.apple.com/education/ Education Apple technology and resources empower every kind of educator and student to learn, create, and define their own success. www.apple.com https://www.apple.com/swift/ Swift - Apple Swift is everywhere. And now i..
[Swift] Swift에서 사용되는 디자인 패턴(pattern)과 예제 코드
·
Swift/정리
안녕하세요 bulmang입니다. Swift 패턴에 대해 알아보고 정리해봤습니다, 틀린 부분이 있으면 알려주시면 감사하겠습니다. Swift에서 패턴은 코드에서 반복되는 공통적인 구조를 식별하는 방법입니다. 패턴은 코드를 작성할 때 일관성 있게 사용하므로 코드의 가독성과 유지보수성을 향상시키는 데 도움이 됩니다. Decorator 패턴 Decorator 패턴은 객체의 기능을 동적으로 확장하는 방법입니다. 이 패턴은 객체를 래핑하고, 래핑된 객체와 동일한 인터페이스를 제공하여 기능을 추가하거나 수정합니다. 이 패턴은 객체의 변경이나 확장을 클래스의 서브 클래스 생성을 통해 하지 않고, 런타임에 유연하게 처리할 수 있습니다. 예를 들어, 다음은 커피에 시럽을 추가하는 예제 코드입니다. protocol Coffe..
[SwiftUI] Geometry
·
Swift/정리
안녕하세요 불망입니다. 이번 글에서는 Geometry에 대해서 소개하겠습니다. SwiftUI에서 Geometry는 뷰가 화면에 배치되는 방법을 제어하는 데 사용되는 객체입니다. 이것은 뷰의 위치, 크기 및 방향을 결정하는 데 유용합니다. 이번 글에서는 SwiftUI에서 Geometry 객체를 사용하는 방법에 대해 설명하겠습니다. GeometryReader GeometryReader는 SwiftUI에서 제공하는 뷰 중 하나로, 부모 뷰가 자식 뷰에 대한 크기와 위치를 결정하는 방법을 제어할 수 있습니다. 즉, 자식 뷰의 위치, 크기 및 방향을 결정하는 데 사용됩니다. GeometryReader는 다음과 같이 작성될 수 있습니다. GeometryReader { geometry in // Geometry 객체..