[Swift] COW (Copy-On-Write) 이해하기
·
📌 Swift
COW(Copy-On-Write) 개념 정리COW(Copy-On-Write)는 이름 그대로 “쓰기 시 복사”를 의미하는 메모리 관리 기술입니다. 값 타입(Struct, Array, String 등)이지만 내부적으로는 값을 복사할 때, 실제 데이터를 곧바로 복사하지 않고 원본과 사본이 동일한 메모리 공간을 공유하게 됩니다. 그러다 둘 중 하나의 값을 수정(Write)하는 시점이 오면, 그 시점에 데이터를 복제하여 별도의 메모리 공간을 할당하게 됩니다. COW의 동작 흐름수정 전var a = [1, 2, 3]var b = a // a와 b는 같은 버퍼(buffer)를 가리킵니다.이 시점에서 a와 b는 같은 힙 메모리 공간(ex: 0x600000849d14)을 가리킵니다. 값 타입(Array)이지만, Swi..
[Swift] 오토 클로저(@autoclosure)란?
·
📌 Swift
오토 클로저(@autoclosure)란?Swift에서 오토클로저(@autoclosure)는 표현식을 자동으로 클로저로 감싸주는 문법이다. 보통 클로저를 인자로 받는 함수에서, 표현식을 더 간결하게 넘기기 위해 사용한다. 괄호 { } 없이도 표현식을 전달할 수 있다. 예를 들자면,func logIfTrue(_ predicate: () -> Bool) { if predicate() { print("True 입니다") }}logIfTrue { return 2 > 1} 이렇게 쓰던 코드를 @autoclosure를 사용하면,func logIfTrue(_ predicate: @autoclosure () -> Bool) { if predicate() { print("Tr..
[오늘의 Swift 지식] max(), min()으로 최대/최소값 구하기
·
📌 Swift
오늘은 가장 큰 값과 가장 작은 값을 구하는 max, min에 대해 알아보겠습니다. max() 1. max(_:_:) max(_:_:) 함수는 두 개의 비교 가능한 값들 중 더 큰 값을 반환합니다. 아래의 간단한 예시를 보면, a와 b를 비교하여 더 큰 값인 100이 출력되는 것을 확인할 수 있습니다. let a = 100let b = 20let bigger = max(a, b)print("더 큰 값은: \(bigger)") // 더 큰 값은: 100 반환 값은 x와 y가 동일한 값이라면, 뒤에 위치한 값인 y가 반환됩니다. 2. max() max()는 "여러 값 중에서 가장 큰 값을 골라서 반환"하는 인스턴스 메서드입니다. max()는 배열이 비어 있을 경우 nil을 반환하기 때문에, 반환..
[Swift] 문자열 나누기 split()과 components() 를 알아보자!
·
📌 Swift
오늘은 Swift에서 문자열을 처리하는 방법중에 문자열을 쪼개야 하는 경우에 사용되는 split와 components 메소드에 대해서 알아보겠습니다. 알고리즘에서도 자주 사용되니 차이점을 알아두면 좋겠죠? split()split 메소드를 먼저 공식문서를 통해서 봅시다. 위와같이 split 메소드는 separator, maxSplits, omittingEmptySubsequences 의 3가지 파라미터가 있습니다. 하나씩 알아봅시다! 📍 separatorCharacter 타입으로, 매개변수를 받아서 해당 인자를 기준으로 쪼개주는 역할을 합니다. 우리가 원하는 바로 그 역할이죠 let str = "Hello World"let arr = str.split(separator: " ")// 출력 : ["H..
[오늘의 Swift 지식] 고차 함수 (map, filter, reduce)
·
📌 Swift
고차 함수란?고차 함수(Higher-Order Function)는 하나 이상의 함수를 인자로 받거나, 함수를 결과로 반환하는 함수를 말합니다. 스위프트에서 제공하는 고차함수는 map, filter, reduce 3가지가 있으며, 컬렉션을 처리할 때 매우 유용합니다.  map(변형)map 메서드는 컨테이너 내부에 각 요소를 변형(transform)하여 새로운 컨테이너를 생성합니다. 다만, 새로운 컨테이너를 생성한 것이기 때문에 기존의 데이터는 변하지 않습니다. map은 for-in 구문과 유사한 결과를 만들지만, 코드가 더 간결하고 선언적으로 작성할 수 있다는 장점이 있습니다. 그러면, for-in 문과 map 메서드를 사용한 코드를 비교해보겠습니다. for-inlet numbers: [Int] = [0,..
[오늘의 Swift 지식] stride 함수 (백준 2742번 기찍 N, 역수 구하기)
·
📌 Swift
백준의 2741번째 문제를 풀고 기찍N 이라는 2742번을 풀다가 오류가 계속 나서 찾아보다가 stride라는 함수를 찾게 되었습니다.그냥 공부만 하기에는 잊어버릴 것 같고 꾸준히 참고할 거 같아서 정리하였습니다. stride( ) 함수 먼저 stride가 무슨 뜻인지 궁금해서 검색을 해보았는데요. 사전적인 의미는 "보폭"이라네요? 코딩에서는 이 의미를 그대로 적용해서 "특정 간격(보폭)만큼 이동"하는 반복을 의미하는 것 같습니다.또한, 위에 있는 공식문서의 Return Value부분을 보면 "start(from)부터 end(to) 방향으로 가되, end(to)는 포함하지 않는다."라고 작성되어 있습니다. 즉, stride(from: to: by: )는 시작값(from)부터 종료값 바로 전까지(to), ..