Swift
-
[SE-0515] Allow reduce to produce noncopyable resultsSwift 2026. 3. 14. 07:40
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0515 Allow reduce to produce noncopyable results에 대해 정리해보겠습니다 🙋🏻IntroSwift의 reduce는 정말 유용한 함수이지만, 몇 가지 한계가 있었습니다.noncopyable 타입을 다룰 수 없었고, initial value를 borrow하는 방식이라 불필요한 복사가 발생했어요. SE-0515는 reduce를 개선합니다 😁Noncopyable initial value와 result를 허용하고Copyable일 때도 initial value를 consume하도록 변경합니다이미 PR이 Accepted 상태이고 구현도 완료되었으니, 곧 현업에서도 쓸 수 있을 것 같습니다 🚀 왜 필요한가?Noncopyable..
-
[SE-0514] Hashable Conformance for Dictionary.Keys, CollectionOfOne and EmptyCollectionSwift 2026. 3. 2. 09:14
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0514 Hashable Conformance for Dictionary.Keys, CollectionOfOne and EmptyCollection에 대해 정리해보겠습니다 🙋🏻IntroSwift 표준 라이브러리의 몇몇 collection 타입들이 Hashable을 conform하지 않는 게 있습니다.Dictionary.Keys, CollectionOfOne, EmptyCollection이 바로 그것들인데요. 이번 SE-0514는 이 세 타입에 Hashable conformance를 추가하는 제안입니다. 특히 Dictionary.Keys는 모든 key가 이미 Hashable인데 keys view 자체는 Hashable이 아닌 게 좀 이상하죠.간단하지만 ..
-
[SE-0510] Introduce Dictionary.mapValuesWithKeysSwift 2026. 2. 21. 00:45
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0510 Introduce Dictionary.mapValuesWithKeys에 대해 정리해보겠습니다 🙋🏻IntroDictionary의 값을 변환할 때 key 정보도 함께 필요한 경우가 종종 있습니다.하지만 현재는 이런 작업을 하려면 init(uniqueKeysWithValues:)나 reduce(into:)를 써야 하는데, 이들은 불필요하게 dictionary를 rehashing하거나 재할당하는 비용이 발생합니다. SE-0510은 이 문제를 해결하기 위해 mapValuesWithKeys라는 새로운 메서드를 제안합니다.Key 정보를 transformation closure에 전달하면서도 성능 오버헤드 없이 값만 변환할 수 있습니다 🚀 현재 시점에서는..
-
[SE-0508] Array expression trailing closuresSwift 2026. 2. 14. 15:44
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0508 Array expression trailing closures에 대해 정리해보겠습니다 🙋🏻IntroSwift에서 trailing closure는 정말 자주 쓰는 문법이죠. 그런데 array나 dictionary 타입 뒤에는 trailing closure를 쓸 수 없다는 걸 아셨나요?[String] 같은 타입 뒤에 중괄호를 쓰면 파서가 제대로 인식하지 못해서 에러가 발생합니다.이번 SE-0508은 바로 이 제약을 풀어주는 제안입니다.이미 Accepted 상태이고 구현도 완료되었으니, 곧 실제로 활용할 수 있을거에요 🚀 왜 필요한가?Array에 trailing closure를 받는 init을 정의하는 건 꽤 합리적인 디자인입니다. 예를 들어 @..
-
[SE-0507] Borrow and Mutate AccessorsSwift 2026. 2. 8. 08:14
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0507 Borrow and Mutate Accessors에 대해 정리해보겠습니다 🙋🏻IntroSwift의 property accessor는 계속 발전중입니다.기존에는 get, set, 그리고 최근 추가된 yielding borrow, yielding mutate가 있었는데요. 이번 SE-0507은 새로운 borrow와 mutate accessor를 제안합니다. 얘네들은 borrowing semantics를 사용해서 복사 오버헤드 없이 값에 접근할 수 있고, yielding accessor보다 성능이 좋습니다.특히 non-copyable 타입을 다루는 collection이나 성능이 중요한 저수준 데이터 구조에 유용할 거예요 🚀 현재 2026년 2월 ..
-
[SE-0506] Advanced Observation TrackingSwift 2026. 2. 1. 06:46
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0506 Advanced Observation Tracking에 대해 정리해보겠습니다 🙋🏻IntroSwift의 Observation 프레임워크는 @Observable 매크로로 간단하게 변화를 추적할 수 있게 해줍니다.하지만 기존 withObservationTracking은 비동기 환경에 최적화되어 있어서, 동기 시스템과 연동하거나 더 세밀한 제어가 필요한 경우에는 한계가 있었습니다. SE-0506은 이런 케이스를 위한 새로운 도구를 제공합니다.대부분의 개발자는 기존 @Observable과 Observations로 충분하지만, 미들웨어 인프라나 위젯 시스템을 개발하는 경우라면 이번 제안이 꼭 필요할 거예요 🚀 현재 2026년 2월 3일까지 리뷰가 진행..
-
[SE-0493] defer support asyncSwift 2026. 1. 24. 12:54
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0493 Support async calls in defer bodies에 대해 정리해보겠습니다 🙋🏻IntroSwift의 defer는 정말 유용한 기능이죠.scope를 벗어날 때 반드시 실행되어야 하는 cleanup 코드를 깔끔하게 작성할 수 있게 해줍니다. 그런데 문제는 defer 블록 안에서는 async 함수를 호출할 수 없다는 점입니다.async context에 있어도 await를 쓰면 에러가 나거든요. 이번 SE-0493은 바로 이 제약을 풀어주는 제안입니다. 이미 Accepted 상태이고 구현도 완료되었으니, 곧 실무에서도 쓸 수 있을 것 같습니다 🚀 왜 필요한가?defer는 Swift 2에서 도입된 기능으로, scope 기반 cleanup..
-
[SE-0504] Task Cancellation ShieldsSwift 2026. 1. 17. 09:03
안녕하세요. 그린입니다 🍏이번 포스팅에서는 SE-0504 Task Cancellation Shields에 대해 정리해보겠습니다 🙋🏻여기서는 제가 이해한걸 바탕으로 요약하고 나름대로 정리한것으로 전체 요약없이 디테일한 부분까지도 원본이 궁금하시면 아래 원문을 참고해주세요!IntroSwift Concurrency 환경에서 Task 취소는 협력적(cooperative)으로 동작합니다.한번 취소되면 되돌릴 수 없고, 자식 Task까지 전파되죠. 그런데 문제는 리소스 정리 같은 코드는 취소 여부와 상관없이 반드시 실행되어야 한다는 점입니다. 지금까지는 이를 해결하기 위해 unstructured task를 생성하는 꼼수를 써야 했는데, 이번 SE-0504는 이 문제를 정면으로 해결하는 제안입니다. 최근 승인된..