목록전체 글 (109)
大器晩成
일전에 중첩함수에서 함수를 리턴하는 경우 클로저의 캡처 현상과 동일하다고 했습니다.func makeIncrementer(forIncrement amount: Int) -> () -> Int { var runningTotal = 0 func incrementer() -> Int { runningTotal += amount return runningTotal } return incrementer}let incrementByTen = makeIncrementer(forIncrement: 100)incrementByTen() // 100incrementByTen() // 200incrementByTen() // 300let alsoIncrementByTen = in..
두 클래스 인스턴스가 서로에 대한 강한 참조를 유지하여 각 인스턴스가 다른 인스턴스를 유지하는 경우 강한 참조사이클이라고 합니다. 이때, 메모리 누수가 발생됩니다. Apple 공식문서 예제class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { print("\(name) is being deinitialized") }}class Apartment { let unit: String init(unit: String) { self.unit = unit } var tenant: Person? deinit { print("Apartment..
Swift는 앱의 메모리 사용량을 추적하고 관리하기 위해 자동 참조 카운팅 (Automatic Reference Counting) (ARC)를 사용합니다. Heap 영역에 할당되는 데이터를 메모리에서 해제하기 위해서는 관리가 필요합니다.할당이 해제되지 않으면 메모리 누수(Memory Leak) 현상이 발생합니다.MRC Model(Object C에서 사용)- 스위프트에서는 ARC 사용실제 개발자 코드를 보았을 때, point2는 point1을 가리키기고 있기 때문에 RC카운트는 2입니다.이것을 컴파일된 코드로 보면, 내부에 refCount가 있으며 인스턴스트를 생성 시 1이 증가하며, point2가 point1 인스턴스를 할당할 때, 1이 추가됩니다. (retain: 참조카운트 증가)이후 실행이 종료되면 ..
고차함수란?함수를 파라미터로 사용하거나, 함수의 실행 결과를 함수로 리턴하는 함수를 말합니다.일반적으로 함수형 언어를 지향하는 언어들에 기본적으로 구현되어 있으며, 크게 3가지가 있습니다.map / filter / reduece (참고: forEach, compactMap, flatMap)Sequence, Collection 프로토콜을 따르는 컬렉션(배열, 딕셔너리, 세트 등)에 기본으로 구현되어 있습니다.Optional 타입에도 구현되어 있습니다. 1. map기존의 배열 등의 각 아이템을 새롭게 매핑해서 새로운 배열을 리턴하는 함수입니다.각 아이템을 매핑/변형해서 새로운 배열을 만들 때 사용합니다.리턴 타입은 어떤 타입으로든 가능합니다.// 예제 1let numbers = [1, 2, 3, 4, 5]..