전체 글 143

Swift - 고차함수 (compactMap, flatMap)

compactMap - 컬렉션의 각 요소를 변환하고, 변환된 결과 중에서 'nil' 이 아닌 값들로 구성된 새로운 컬렉션을 만듦 - 변환 과정에서 옵셔널 값을 처리 -> 옵셔널 바인딩 기능을 가짐 (옵셔널 제거) - 반환 된 값이 'nil' 이 아닌 경우에만 최종 컬렉션에 포함 기본 형식 func compactMap(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult] - Element : 컨테이너 요소 타입 - ElementOfResult : 변환 후 타입 - transform : 클로저로, 컨테이너의 각 요소에 대해 실행되는 변환 작업을 정의. 옵셔널 값을 반환 (ElementOfResult?) compactM..

Swift 2023.07.12

Swift - 고차함수 (map, filter, reduce)

* 고차함수 (Higher-order Function) - 다른 함수를 인자로 받거나 함수를 반환하는 함수 - Swift의 함수(클로저)는 일급시민이기 때문에 함수의 전달 인자로 전달할 수 있으며, 함수의 결과 값으로 반환할 수 있음 * 종류 map filter reduce forEach compactMap FlatMap map 함수 - 컨테이너(예: 배열)의 각 요소에 변환(transform)을 적용하여 새로운 컨테이너를 생성 - 변환은 클로저(익명 함수)를 사용하여 수행 기본 형식 func map(_ transform: (Element) throws -> T) rethrows -> [T] - Element : 컨테이너 요소 타입 - T : 반환 후 요소 타입 - transform : 매핑 클로저로, ..

Swift 2023.07.11

Swift - 의존성 주입(Dependency Injection)

의존성 : Dependency - 객체 지향 프로그래밍에서 Dependency는 '서로 다른 객체 사이에 의존 관계가 있는 것'을 말함 - 즉, 의존하는 객체가 수정되면, 다른 객체도 영향을 받는다는 것 import UIKit // 의존성이 있는 프로토콜 protocol Talk { func sayHi() } // Talk 프로토콜을 채택하여 구현한 클래스 class FriendTalk : Talk{ func sayHi() { print("FriendTalk - sayHi()") } } // 의존성을 주입받은 클래스 class LetsTalk{ private let talk : Talk init(){ self.talk = FriendTalk() //FriendTalk 인스턴스를 직접 생성하여 주입 } f..

Swift 2023.07.10

Swift - 문서화 (퀵헬프 표시 주석 작성 방법)

* 퀵헬프 (Quick Help) - Apple의 개발도구인 Xcode에서 제공하는 기능으로, 코드 문서와 설명을 즉시 확인 할 수 있는 기능 - 개발자가 작성한 코드에 대한 문서화 및 주석을 표시하여 코드 작성 중 필요한 정보를 쉽게 엑세스할 수 있도록 도와 줌 - 사용방법 : 커서를 원하는 코드 식별자 위에 놓고 'Option(Alt)' 키 클릭하면 패널이 나타남 * 퀵헬프 주석 작성 방법 1. 한 줄 주석 - 슬래시 세 개 ( / / / ) 사용 /// 슬래시 3개를 사용하요 주석을 달 수 있음 /// 자기소개 함수 func introduce(name : String, age : Int) -> String { print(name, age) var introduce = "안녕하세요 저는 \(name)..

Swift 2023.07.09

Swift - 디자인 패턴(생성 관련) - 빌더 패턴

* Builder pattern - 복잡한 객체의 생성과 표현을 서로 분리해 유사한 타입을 생성하기 위해 동일한 프로세스가 사용될 수 있게 함 - 객체 생성 과정을 단계별로 나누고, 유연하고 가독성 있는 방법으로 복잡한 객체를 생성하는 디자인 패턴 - 주로 많은 매개변수를 가진 객체를 생성하거나, 객체 생성 과정을 다양하게 구성하고자 할 때 사용 - 복잡한 객체를 일관된 방식으로 생성하여 가독성 있게 만들어주고, 객체 생성 과정에 유연성 제공 - 객체 생성에 필요한 다양한 구성 요소들을 분리하여 유지 및 확장이 용이하게 만듦 - 선택적인 매개변수나 기본값이 있는 매개변수 등 처리하기 용이 - 작은 규모의 객체에서는 비효율적 * 구성요소 1. 제품(Product) - 빌더 패턴을 통해 생성하고자 하는 복잡..

Swift 2023.07.08

Swift - 디자인 패턴(생성 관련) - 싱글톤

* Singleton (싱글톤 패턴) - 어떤 클래스의 인스턴스가 오직 하나만 생성되고, 어디서든지 그 인스턴스에 접근할 수 있도록하는 디자인 패턴 - 전역 변수를 사용하지 않고 하나의 공유 인스턴스를 사용하여 데이터를 관리하고, 다른 객체들이 이 인스턴스를 공유하여 사용 - 메모리를 인스턴스 하나에만 할당하여 공유하며 사용하므로 메모리를 낭비하지 않음 장점 - 전역적인 접근성 : 어디서든 동일한 인스턴스에 접근 가능 -> 데이터 공유 및 상태 유지에 용이, 객체 간 일관된 동작 보장 - 리소스 공유 : 인스턴스는 하나이므로, 매번 리소스를 새로 할당하는 비용을 절약 가능 단점 - 의존성과 테스트 어려움 : 싱글톤은 전역적인 접근성을 가짐 -> 다른 객체들에 대한 의존성 강화 및 테스트 어려워짐 (의존성..

Swift 2023.07.08

Swift - 소프트웨어 아키텍처 (MVP, VIPER)

* Swift 소프트웨어 아키텍처 - Swift 언어로 애플리케이션을 구조화하는 방법과 관련된 원칙과 패턴 모음 - 소프트웨어 아키텍처를 적용함으로써 모듈성, 유지보수성, 확장성을 개선할 수 있음 - MVC, MVVM, MVP, VIPER * MVP (Model - View - Presenter) - 사용자 인터페이스(UI)를 모델, 뷰, 프리젠터로 구성하여 역할을 분리하는 방식 1. Model - 데이터와 비즈니스 로직을 담당 - 데이터를 가져오고 수행하며 비즈니스 규칙을 적용하여 데이터를 처리 2. View - 사용자 인터페이스를 표시하고 사용자 입력을 받음 - 프리젠터로부터 전달받은 데이터를 화면에 표시하고 사용자의 동작을 감지하여 프리젠터에 전달 3. Presenter - 모델과 뷰 사이에서 중개..

Swift 2023.07.06

Swift - 소프트웨어 아키텍처(MVC, MVVM)

* Swift 소프트웨어 아키텍처 - Swift 언어로 애플리케이션을 구조화하는 방법과 관련된 원칙과 패턴 모음 - 소프트웨어 아키텍처를 적용함으로써 모듈성, 유지보수성, 확장성을 개선할 수 있음 - MVC, MVVM, MVP, VIPER ● MVC (Model View Controller) - 소프트웨어 아키텍처의 가장 기본적인 형태로 모델(Model), 뷰(View), 컨트롤러(Controller)로 구분 1. 모델(Model) - 데이터와 비즈니스 로직을 관리 - 애플리케이션의 상태와 동작을 나타냄 - 데이터의 변경을 감지하고, 변경 사항을 컨트롤러에게 알림 2. 뷰(View) - 사용자 인터페이스를 표시 및 관리 - 모델의 상태를 표시하고, 사용자의 입력을 받음 - 모델의 변경 사항을 감지하고, ..

Swift 2023.07.02