Tech

· Tech
Swift에는 특정 타입에 대해서 런타임에서 조사할 수 있도록 하는 기능이 있습니다. 이를 Reflection이라고 합니다. Reflection은 특정 타입에 대해 해당 타입이 무엇이고 그 타입이 가지는 프로퍼티들을 알려주기 때문에 디버깅에서 주로 쓰입니다. 공식 문서에서도 디버깅과 리플렉션이 같이 수록되어 있습니다. Debugging and Reflection Fortify your code with runtime checks, and examine your values' runtime representation 그럼 Reflection이 뭔지에 대해 더 알아보도록 하겠습니다. Reflection을 썼을 때의 차이점 먼저 reflection을 사용했을 때 어떤 장점이 있는지 간단하게 살펴보도록 하겠습니..
· Tech
이름에서 유추할 수 있듯이, 데코레이터 패턴은 특정 객체에 추가적인 기능을 덧붙여서 꾸며주는 기능입니다. 데코레이터 패턴을 사용하면 유연하면서 깔끔한 구조로 하나의 추상적인 동작에 대한 구체 기능들을 조합할 수 있습니다. 저는 디자인 패턴들의 정의를 볼 때 다이어그램과 글로 된 정의들을 보면 이해가 잘 안 가는 경우가 많았습니다. 따라서 정의를 보기전에 먼저 예제를 통해서 데코레이터 패턴이 무엇이고 어떤 특징을 가지고 있는지에 대해 알아보겠습니다. 단순 구현하기 특정 기능을 수행하던 중 에러가 발생했을 때 에러를 기록하는 ErrorLogger 객체가 있습니다. 이 객체는 에러가 발생하면 에러를 저장하여 나중에 꺼내서 확인해 볼 수 있도록 하는 역할을 하고 있습니다. class ErrorLogger { f..
· Tech
드디어 스위프트에도 매크로가 등장했습니다. 저는 평소에도 안드로이드나 서버에서 쓰고 있는 어노테이션들을 보면서 스위프트에도 있었으면 좋겠다고 생각을 많이 했었는데요, 매크로를 구현해 보면서 알게 된 것들을 정리해 보겠습니다. 매크로 시작하기 매크로의 종류와 어떻게 만드는지는 WWDC 영상과 몇몇 예시들만 참조하면 익히실 수 있습니다. 저는 처음에 예시만 보고 바로 하려니까 매크로의 종류나 과정이 잘 이해가 안 돼서 힘들었던 경험이 있어서 시작하시기 전에 아래 WWDC 영상은 보는 것을 추천드립니다. https://developer.apple.com/videos/play/wwdc2023/10167 Expand on Swift macros - WWDC23 - Videos - Apple Developer Di..
· Tech
최근에 서버 코드를 볼일이 생겼습니다. 서버에서는 코틀린 언어를 사용하고 있고 가뜩이나 로직을 파악하기 어려운데 생소한 문법들이 튀어나와 저의 눈을 더 어지럽게 만들더군요. 그때그때 궁금한 것들을 찾아보다가 안드로이드 동료분의 추천을 받아 Kotlin in Action 이라는 책을 읽으면서 자주 쓰이는 문법에서 Swift와 어떤 점이 다른지에 대해서 정리해 보았습니다. extension 우리가 즐겨 사용하는 extension은 코틀린에도 있습니다. 하지만 눈에 정말 안 들어 오더군요. // swift extension String { func hello() { print("Hello!") } } // kotlin fun String.hello() { println("Hello!") } 코틀린에서는 fun..
· Tech
앱의 구조가 복잡해지고 깊어질 수록 pure DI로 디펜던시들을 주입해주기 위해서 많은 노력들이 들어갑니다. Composition Root에서부터 필요한 부분까지 디펜던시들을 전달하기 위해 중간에서도 디펜던시를 관리해주어야 하기 때문이죠. 이를 해결하기 위해 pointfree에서는 DI Container 역할을 하는 라이브러리를 만들었습니다. 원래는 ReducerProtocol과 함께 제공되던 Dependencies 라이브러리가 TCA를 사용하지 않아도 사용할 수 있도록 별도의 라이브러리로 분리되면서( 이미 분리된지 시간이 좀 지났습니다 ) DI library로 swift dependencies를 도입할 지 고민인 분들을 위해 이 라이브러리의 간략한 소개와 이를 사용하면서 느낀 점들을 정리해보고자 합니다..
· Tech
모바일 앱들은 사용자들과 직접 맞닿아 있는 창구로서, 많은 앱들이 결제 기능을 지원합니다. 앱 자체가 유료인 경우도 있지만, 앱 내부에서 상품을 판매하는 경우가 많습니다. 이러한 결제는 어떻게 구현할 수 있을까요? iOS에서 결제는 StoreKit을 사용하여 구현됩니다. 아직 StoreKit에 대해서 잘 모르시는 분들(저요)이 개념과 흐름을 이해하는데 도움이 되기 위해 StoreKit의 각 문서들을 요약하여 전체적인 결제의 과정과 그 구현에 대해서 정리하였습니다. 상품 ID가져오기 모든 상품에는 product identifier가 있습니다.(상품을 등록할때 정해줘야 합니다) 이 product identifier를 앱 번들이나 서버에 저장했다가 이것을 사용해 앱스토어에서 상품의 정보들(가격 등)을 가져올 ..
· Tech
스냅샷 테스트란 특정 상태에서의 화면을 그려 이미지로 저장해놓고 테스트를 돌릴 때마다 다시 특정 상태에서의 화면을 그려 이미지로 만든 후 기존에 저장된 이미지와 픽셀 비교를 하여 달라진 부분이 있는지를 확인하는 테스트 기법입니다. 스냅샷 테스트를 적용하면 손쉽게 UI에 대한 테스트를 해볼 수 있습니다. 스냅샷 테스트 라이브러리 스냅샷 테스트 라이브러리는 크게 두 가지가 있습니다. 우버의 iOSSnapshotTestCase와 포인트프리의 SwiftSnapshotTesting 입니다. 우버 라이브러리는 페이스북에서 만든 FBSnapshotTestCase의 명맥을 유지하면서 이어져오는 라이브러리이기도 합니다. 둘다 쓰임새와 사용법은 비슷합니다만 SwiftSnapshotTesting은 뷰뿐만 아니라 다른 것들도..
· Tech
SwiftUI에서는 alignmentGuide 메소드를 통해 정렬 기준을 커스터마이징할 수 있습니다. 이를 통해서 우리는 단순히 제공되는 정렬이 아닌, 우리만의 기준으로 뷰들을 정렬시킬 수 있습니다. func alignmentGuide(g, computeVlue) -> some View alignmentGuide 메소드는 g와 computeValue 두 가지 인자를 받습니다. g는 HorizontalAlignment 또는 VerticalAlignment인데, 해당 Alignment에 대한 정렬 기준을 나타낸다는 뜻입니다. 예를들어 g에 HorizontalAlignment.leading를 주게 되면 HorizontalAlignment.leading에 대한 기준을 alignmentGuide를 통해 커스텀한다..
JAEYOUNGYUN
'Tech' 카테고리의 글 목록