iOS 152

MVVM 패턴 - Binding 개념

✅ MVVM 패턴이란? Model-View-ViewModel로 구성된 아키텍처 패턴 ✅ 구성요소 데이터를 처리하는 모델(Model)사용자에게 보여지는 UI인 뷰(View)뷰에 바인딩되어 모델과 뷰 사이를 이어주는 뷰-모델(View Model) ⭐ Model과 View뿐만 아니라 Binding을 통하여 View와 View Model 간의 의존성까지 최소한 형태로, 데이터 처리 로직과 UI 간 상호 영향이 적어 모듈화를 통해 재사용성을 높이고 및 역할별로 Unit Test가 용이해진다.    🟥 바인딩 (Binding) MVVM (Model-View-ViewModel) 패턴에서 바인딩(Binding)은 View와 ViewModel 사이의 데이터와 이벤트를 자동으로 동기화하는 메커니즘이다. 바인딩을 통해 V..

iOS/Swift 2024.05.30

MVVM 패턴 (Model - View - ViewModel)

사용자의 Action들은 View를 통해 들어옵니다.View에 Action이 들어오면 ViewModel에 Action을 전달합니다.ViewModel은 Model에게 데이터를 요청합니다.Model은 ViewModel에게 요청받은 데이터를 응답합니다.ViewModel은 응답 받은 데이터를 가공하여 저장합니다.View는 Data Binding을 이용해 UI를 갱신시킵니다. 🟥 MVVM 패턴이란?Model, View, ViewModel 로 구성된 패턴이다.  Model: 애플리케이션의 데이터를 나타낸다. 비즈니스 로직과 관련된 데이터를 처리한다. View: 사용자 인터페이스를 나타낸다. 사용자에게 정보를 보여주고, 사용자 입력을 받는다. ViewModel: View와 Model 사이의 중간자 역할을 한다. V..

iOS/Swift 2024.05.30

고차함수 (Map, Filter, Reduce)

🟥 고차함수란?다른 함수를 전달인자로 받거나 함수 실행의 결과를 함수로 반환하는 함수를 말한다.   🟥 Map기존 데이터를 변형하여, 새로운 컨테이너를 만든다. 단, 이 때 기존 데이터는 변형되지 않는다.  ✅ for - in 구문과 기능상 차이는 없지만, 다음과 같은 이점이 있다. 코드의 간결성재사용 용이컴파일러 최적화 성능 향상✅ for - inlet numArray = [1,3,5,7,9]var multiArray = [Int]()for num in numArray { multiArray.append(num * 2)}print(multiArray)// [2, 6, 10, 14, 18]✅ maplet numArray = [1,3,5,7,9]let multiArray = numArray.map..

iOS/Swift 2024.05.26

MVC 패턴 (Model - View - Controller)

🟥 MVC 패턴이란?Model, View, Controller의 줄임말이다. Model: 애플리케이션의 Data를 관리한다. 주로 구조체 또는 클래스로 생성된다. View: 화면과 Controller을 스크린을 통해 보여주는 역할을 한다. Controller: Model과 View 사이에서 연결하는 역할을 한다✅ Model과 View는 직접 소통이 되지 않는다.    1️⃣ Model데이터만 관리한다. View와 직접적인 연결은 없다. // MARK: - Modelstruct Person { var name: String var age: Int var address: String}  2️⃣ View화면 표시만 관리한다. Model과는 직접적인 연결은 없다.// MARK: - Viewcl..

iOS/Swift 2024.05.25

확장 (Extension)

확장 (Extension) 이란?클래스, 구조체, 열거형 타입에 새로운 property, method, initializer 등을 추가하는 것을 말하는데, 원본 타입에 접근하지 못하는 타입에도 확장해서 사용할 수 있다.   확장은 어떻게 사용하나? ⭐ 포인트는 "기존에 것에 추가한다" 이다. ⭐ 아래와 같이 CGPoint 라는 구조체가 있다. let point: CGPoint = .init(x: 10, y: 20) 여기서 point 라는 변수를 print 문을 이용하여 아래와 같이 출력하고 싶다면?x: 10, y: 20 근데 CGPoint란 구조체에는 위에 처럼 출력해줄 수 있는 기능이 없다. 따라서 출력하려면 아래와 같이 직접 print 문을 사용하여 구현해야 한다. print("x: \(point.x..

iOS/Swift 2024.05.24

카카오톡 로그인 API 구현

카카오톡 로그인 API 설정  https://developers.kakao.com/docs/latest/ko/kakaologin/common Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com  기본 설정은 위의 사이트에 들어가서 한다.  그 외의 파일은 아래 코드를 구현한다.  AppDelegate.swift 코드 구현 import UIKitimport CoreDataimport KakaoSDKCommonimport KakaoSDKAuth@mainclass AppDelegate: UIResponder, UIApplicationDelegate { ..

iOS/UIKIT 2024.05.23

네비게이션 바에 배경 색상 넣기....

아래 처럼 나와야 하는데.. 이거 하느라 엄청 뻘짓했다.. 아래 보면 스크롤하면 글자가 작아지고 커지고하면서 배경색이 그대로지만 func setupNavigationTitle() { self.navigationItem.title = "Home Controller" let appearance = UINavigationBarAppearance() appearance.backgroundColor = .systemIndigo navigationController?.navigationBar.standardAppearance = appearance navigationController?.navigationBar.scrollEdgeAppearance = appearance /* 그냥 navigationBar.barT..

iOS/UIKIT 2024.02.20

클로저 6편

@escaping 지금까지 써온 클로저는 다음과 같이 "non-escaping Closure" 임 func runFuntion(closure: (Int, Int) -> Int) { closure(1,2) } ※ non-escaping Closure 란? 함수 내부에서 직접 실행하기 위해서 사용 파라미터로 받은 클로저를 변수 또는 상수에 대입 불가 중첩 함수에서 클로저를 사용할 경우 중첩 함수 리턴 불가 함수의 실행 흐름에서 탈출 안되기 때문에 함수가 종료되기 전에 무조건 실행되어야 함 만약에 상수에 클로저를 대입하면? func runFuntion(closure: (Int, Int) -> Int) { let answer: (Int, Int) -> Int = closure } 아래와 같이 오류가 발생 함수의..

iOS/Swift 2024.02.17