오늘은 Swift의 에러처리에 대해서 공부했다 (TIL) GitHub - JIWON1923/Today-I-Learend Contribute to JIWON1923/Today-I-Learend development by creating an account on GitHub. github.com 마침 알고리즘 공부 중 피보나치 수열이 나왔는데, 사용자가 음수를 입력했을 때 에러를 처리하는 코드를 써봤다! enum error: Error { case arange } func fibo(_ n: Int) throws -> Int { if n < 0 { throw error.arange } else if n Int { if n < 0 { throw error.arange } else if n
복습) 값 형식과 참조 형식 (711) 값 형식 (Value Type) Baisic Type, 튜플, 구조체, 열거형, 컬렉션 등이 해당된다. Stack 영역에 값이 저장된다. 필요시에는 항상 메모리의 값이 복사되어 전달된다. 사용이 끝나면, Stack프레임에서 알아서 제거되므로 별도로 메모리 관리를 할 필요 없다. 참조 형식 (Reference Type) 클래스, 클로저가 해당된다. 필요시에 항상 메모리의 주소를 전달한다. (Heap의 주소를 Stack에 저장) Heap 영역에 실제 값들이 저장된다. **RC(Reference Counting, 참조 카운팅)**을 통해 메모리를 관리한다. Swift에서 사용하는 ARC 모델 복습) 메모리 구조 - 코데힙스 코드영역 CPU가 실행할 수 있는 실질적 명령어..
forEach 함수 기존 배열 등의 각 아이템을 활용해서 각 아이템 별로 특정 작업을 실행한다. 클로저는 return 타입 없이 작업을 할 뿐이다. return → Void (새로운 배열을 반환하지 않는다.) 기존 배열의 아이템을 가지고 작업을 하는 것이다. let numbers = [1, 2, 3, 4, 5] numbers.forEach { num in print(num) } numbers.forEach { print($0) } compactMap 함수 기존 배열 등 각 아이템을 새롭게 매핑해서 변형하되, 옵셔널 요소는 제거하고, 새로운 배열을 리턴한다. map 함수 + 옵셔널 제거 기능이 있다고 생각하면 된다. optional binding의 기능이 내장되어있다. let strings = [Strin..
reduce 기존 배열 등의 각 아이템을 클로저가 제공하는 방식으로 결합해서 마지막 결괏값을 리턴한다. 초깃값과 클로저(결합방식)이 필요하다. → 2개의 파라미터 사용 각 아이템을 결합하여 단 하나의 값으로 리턴한다. 초깃값은 클로저를 반복하며 지속적으로 업데이트 된다. 이전 클로저의 결괏값 = 초깃값에 업데이트 예시코드 - 배열의 합 계산 var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] // numbers.reduce (parameter1, parameter2)이고, parameter2 = 함수형태 var result = numbers.reduce(0) { (sum, num) in return sum + num } print(result) // 55, 모든 원소의 합 ..
filter 각 아이템을 필터링해서 걸러내야할 때 사용할 수 있다. 기존 컬렉션 아이템을 클로저 조건에 맞추어 확인한다. 클로저 조건에 true인 아이템만 새로운 배열로 반환된다. return 문은 반드시 Bool을 반환해야한다. 비교연산자, 논리연산자가 사용가능하다. 예시코드 - 특정 문자가 있는 경우 확인 let names = ["Apple", "Bus", "Circle", "Bee"] var result = names.filters { name in // 참과 거짓을 판별하는 문장 return names.contains("B") // contains: 대소문자를 구분 } print(result) // ["Bus", "Bee"] 예시코드 - 클로저(사후적) var numbers = [1, 2, 3, ..
Map 함수 (Mapping) 기존 배열 등의 각 아이템을 새롭게 매핑해서 새로운 배열을 리턴하는 함수이다. 매핑 방식은 클로저에서 정의해야한다. 각 아이템을 매핑 및 변형하여 새로운 배열을 만들 때 사용한다. 어떤 타입이든 변형할 수 있다. 타입 변형 뿐만아니라, 값의 변형도 가능하다. 예제 - 타입의 변형 let numbers = [1, 2, 3, 4, 5] var newNumbers = numbers.map { num in return "\\(num)" } var newNubers2 = numbers.map { "\\($0)" } print(newNumbers) // ["1", "2", "3", "4", "5"] //numbers.map( T##(Int) throws -> T#>) 예제 - 값의 변..
고차함수 (Higher order function) 함수를 파라미터로 사용하거나, 함수 실행 결과를 함수로 리턴하는 함수이다. 즉 Input = 함수 또는 output = 함수 parameter = 함수 또는 return = 함수 파라미터로 함수가 사용될 때에는 보통 클로저 형태로 나타낸다. 매개변수를 생략하여 $0으로 나타낼 수 있다. 코드가 한 줄일 때, return 키워드를 생략하여 표현하는 것이 일반적이다. 고차함수는 왜 필요할까? 대부분 함수형 프로그래밍에서 사용하는 형태이다. map, filter, reduce를 많이 사용한다. forEach, compactMap, flatMap도 존재 sequence, collection 프로토콜을 따르는 컬렉션에 기본적으로 구현되어있다. 배열, 딕셔너리, ..
@escaping 키워드 클로저 앞에 작성하며, 매개변수에 사용된다. 필요한 이유? non-escaping의 경우, 함수가 종료되면, 파라미터로 쓰이는 클로저가 제거된다. escaping 키워드를 사용하면, stack frame에서 파라미터가 삭제 되지 않는다. 클로저가 함수의 실해 흐름을 벗어날 수 있도록 하는 것이다. 즉, 함수가 종료되어도 클로저가 존재할 수 있도록 한다. 언제 사용할까? 함수 내부에 존재하는 클로저(함수)를 외부 변수에 저장할 때 GCD 비동기 코드 @escaping 키워드를 사용하는 경우 어떤 함수의 내부에 존재하는 클로저(함수)를 외부 변수에 저장할 때 기존 non-escaping이라면, 단순 실행 후 종료한다면, Heap에 저장할 필요가 없다. escapin의 경우, 함수의 ..
클로저의 메모리 구조 클로저는 참조형식이다. (Reference Type) 필요 시 메모리의 주소를 전달한다. 값은 Heap 영역에, 주소는 Stack 영역에 저장한다. ⇒ 코드 영역의 메모리 주소를 Heap에 저장하며, 실행은 Stack 프레임에서 실행된다. RC를 통해 메모리를 관리한다. (Swift - ARC) 클로저의 캡처 var stored = 0 let closure = { (number: Int) -> Int in stored += number return stored } closure(3) // 3 closure(4) // 7 closure(5) // 5 stored = 0 closure(5) // 5 closure 내부에서 stored라는 외부 변수를 사용한다. 외부 변수를 계속해서 사용..
문법 최적화 원칙 문맥 상에서 파라미터와 리턴 값의 타입이 추론된다면 생략할 수 있다. 싱글 익스프레션의 경우 (코드가 한 줄) 리턴 키워드는 생략할 수 있다. (Implic return) 아규먼트 이름의 축약(Shorthand Arguments) → $0, $1로 표현 트레일링 클로저 문법 함수의 마지막 전달 인자(아규먼트)로 클로저를 전달할 때, 소괄호를 생략할 수 있다. 트레일링 클로저, 후행 클로저 문법 클로저가 실행될 때 적용할 수 있는 문법 함수의 마지막 전달인자로 클로저가 전달되면, 소괄호를 생략할 수 있다. 소괄호를 중괄호 앞으로 가져온다. argument 생략 가능 소괄호 생략 가능 예제 1 closure의 정의 및 사용 func closureParamFunction(closure: ()..
- Total
- Today
- Yesterday
- COMMIT
- Swift
- 정답
- 코드 업
- 반복문
- 설명
- 기초 100제
- replit
- CodeUp
- 파이썬
- 코드업
- level1
- 백준
- 깃
- 프로그래머스
- 레플릿
- ord
- 16진수 입력
- 시간초과
- 부르트포스
- 이것이 코딩테스트다
- for문
- 리플릿
- Code up
- python
- CHR
- baekjoon
- 깃허브
- do while
- SwiftUI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |