iOS/Swift 43

ObservableObject와 @Published

개체가 변경되기 전에 내보내는 게시자가 있는 개체 형식이다.?  @Published와 ObservableObject는 스위프트의 Combine 프레임워크에서 사용되는 속성 래퍼와 프로토콜이다.  ✅ 주로 SwiftUI와 함꼐 사용되어 상태 관리를 쉽게 하고, 데이터 변경 시 UI가 자동으로 업데이트 되도록 한다.   🟥 @Published ObservableObject에 속하는 프로퍼티가 변경될 때마다 자동으로 변경 사항을 알리는 역할을 한다. 이를 통해, 프로퍼티를 구독(Subscribe)하고 있는 UI 컴포넌트들이 자동으로 업데이트 된다.   🟥 ObservableObject Combine 프레임워크의 프로토콜로, 객체가 변경될 수 있음을 나타낸다.이 프로토콜을 준수하는 클래스는 프로퍼티가 변경될..

iOS/Swift 2024.06.03

Combine (MVVM 패턴)

Combine | Apple Developer Documentation Combine | Apple Developer DocumentationCustomize handling of asynchronous events by combining event-processing operators.developer.apple.com  🟥 Combine 이란? 이벤트를 처리하는 operators들을 결합함으로써 비동기 이벤트들을 커스텀하게 다룬다. Combine을 사용하면 비동기 작업과 데이터 흐름을 선언적으로 작성할 수 있으며, 특히 비동기 이벤트와 데이터 스트림을 처리하는 데 매우 유용하다. 🟥 핵심 개념Publisher:Publisher는 이벤트를 발행하는 객체이다Publisher는 데이터를 제공하고, 구..

iOS/Swift 2024.05.30

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

클로저 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

클로저 5편

@autoclosure 파라미터로 전달된 일반 구문 & 함수를 클로저로 래핑(Wrapping)하는 것을 말함 "@autoclosure" 라는 키워드를 파라미터 함수 타입 앞에 사용 func runFunction(closure: @autoclosure ()->()) { // 내부코드 } 여기서 closure 라는 파라미터는 실제로 클로저를 받지 않았지만, 클로저처럼 사용 가능 ※ 단, 실제 클로저를 전달받지 않았기 때문에 파라미터로 값을 넘기는 것 처럼 ( ) 를 통해 구문을 넘기는게 가능 runFunction(closure: 22>=23) " 22>=23" 은 일반 구문이지만, 실제로는 @autoclosure로 설정했기 때문에 클로저처럼 사용 가능 @autoclosure는 클로저가 호출되기 전까지 클로저..

iOS/Swift 2024.02.13

클로저 4편

클로저의 경량 문법 클로저의 문법을 단순하게 쓸 수 있게 하는 문법 func runFuntion(closure: (Int, Int) -> Int) { closure(1,2) } 위의 함수는 파라미터로 받은 클로저를 실행 클로저의 파라미터로 Int 타입의 1, 2를 전달 위의 함수를 호출하려면? 아래와 같이 클로저를 완전체로 작성해야함 runFuntion(closure: { (value1: Int, value2: Int) -> Int in return value1 + value2 }) 파라미터 타입과 리턴 타입 생략 가능 위의 함수에서 파라미터 타입 (Int, Int) 와 리턴 타입 Int 생략 가능 runFuntion(closure: { (value1, value2) in return value1 + v..

iOS/Swift 2024.02.10