개발 10

[Swift] 동적 멤버 조회(Dynamic Member Lookup)

1. 정적 타입 언어와 동적 타입 언어란?프로그래밍 언어는 변수의 타입을 결정하는 방식에 따라 정적 타입(Static Typing)과 동적 타입(Dynamic Typing)으로 나뉩니다.정적 타입 언어(Static Typing)정적 타입 언어에서는 변수의 타입이 컴파일 타임에 결정되며, 코드 작성 시 명시적으로 타입을 선언해야 합니다. 대표적인 정적 타입 언어로는 Swift, Java, C, C++ 등이 있습니다.예제 (Swift의 정적 타입 예시)var name: String = "Swift"var age: Int = 31컴파일러는 name이 String 타입이고, age가 Int 타입임을 알고 있으며, 다른 타입의 값을 할당하려 하면 오류를 발생시킵니다.동적 타입 언어(Dynamic Typing)동적..

[iOS] Core Data를 활용한 Data Migration

Core Data에서는 경량 마이그레이션(Lightweight Migration)과 무거운 마이그레이션(Heavyweight Migration)을 지원하며, 복잡한 마이그레이션을 위해 매핑 모델(Mapping Model)을 활용할 수도 있습니다.1. Core Data 마이그레이션 개요데이터 모델이 변경되면 기존 데이터를 새로운 데이터 모델에 맞게 변환해야 합니다. Core Data는 이를 자동으로 처리할 수 있도록 다양한 마이그레이션 전략을 제공합니다.마이그레이션이 필요한 상황엔터티(Entity) 이름 변경속성(Attribute) 추가/삭제관계(Relationship) 변경데이터 변환이 필요한 경우2. 경량 마이그레이션 (Lightweight Migration)경량 마이그레이션은 Core Data가 자동..

클라이언트 2025.02.18

[iOS] Jailbreak (탈옥) 상태에서 Keychain 데이터 가져오기

iOS의 Keychain Services는 애플리케이션이 비밀번호, 암호화 키, 인증 토큰 등을 안전하게 저장할 수 있도록 제공하는 보안 저장소입니다. 키체인 데이터는 앱의 샌드박스(Sandbox) 내에서만 접근 가능하며, 일반적으로 다른 앱에서 접근할 수 없도록 보호됩니다.키체인 항목은 다음과 같은 주요 API를 통해 저장 및 조회됩니다.SecItemAdd → 새로운 항목을 추가SecItemUpdate → 기존 항목을 업데이트SecItemCopyMatching → 특정 항목을 조회SecItemDelete → 항목 삭제이러한 보안 구조 때문에 일반적인 방법으로는 키체인 데이터를 쉽게 추출할 수 없지만, 탈옥 환경이나 동적 분석 도구를 사용하면 특정 조건에서 데이터를 확인할 수 있습니다. iOS 키체인 정..

클라이언트 2025.02.16

개발 및 운영의 개념 (샌드박스? 인하우스? CBT?)

소프트웨어 개발 및 운영 과정에서 자주 언급되는 개념 중 '샌드박스(Sandbox)', '인하우스(In-house)', 'CBT(Closed Beta Test)', 그리고 '알파(Alpha)', '베타(Beta)', '리얼(Real)' 등의 단계가 있다. 이 용어들은 각각 소프트웨어의 개발 방식과 테스트 과정에서 중요한 의미를 가지며, 제품의 완성도와 성공 가능성을 높이는 데 필수적인 요소다. 이번 글에서는 이 개념들을 최대한 쉽게, 그리고 자세하게 설명해보려 한다.샌드박스(Sandbox)샌드박스의 개념샌드박스(Sandbox)는 원래 모래 놀이터를 의미하는 단어다. 소프트웨어 개발에서는 특정한 제약 없이 개발자들이 독립적인 환경에서 실험하고 테스트할 수 있는 격리된 공간을 제공하는 것을 의미한다.샌드박스..

개발 일반 2025.02.16

[UIKit] UIColor Hex 초기화, 문자열 초기화 유틸 Extension 코드

Swift에서 UIColor를 초기화할 때, 다양한 16진수 형식의 문자열(0x~~, #~~~, FFFFFF)을 지원하는 유틸리티 확장을 구현해보겠습니다. 또한, 이를 검증하기 위한 테스트 코드도 작성합니다.import UIKitextension UIColor { convenience init?(hex: String) { var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines) hexSanitized = hexSanitized.replacingOccurrences(of: "0x", with: "").replacingOccurrences(of: "#", with: "") var rgb: UInt..

클라이언트 2025.02.16

프로그래밍 개발 뭐부터 시작하면 좋을까?

프로그래밍, 개발을 시작하기 위해서는 뭐부터 시작하면 좋을까요? 개론 형식으로 준비해보았습니다.시리즈로 세부적인 내용을 정리하여 차차 작성하도록 하겠습니다.1. 프로그래밍 공부를 위한 기본 준비(1) 목표 설정어떤 언어를 배울지 결정하기 (Python, Java, JavaScript, C 등)배우려는 이유 설정 (취업, 프로젝트 개발, 문제 해결 등)현실적인 학습 계획 세우기(2) 적절한 학습 도구 준비컴퓨터 및 개발 환경 세팅 (VS Code: https://code.visualstudio.com/, PyCharm: https://www.jetbrains.com/pycharm/, IntelliJ: https://www.jetbrains.com/idea/, Xcode: https://developer.a..

개발 일반 2025.02.16

[Swift] Swift의 DSL(Domain-Specific-Language) 설계 및 구현

1. DSL(Domain-Specific Language)DSL(Domain-Specific Language)은 특정 도메인에 특화된 언어로, 특정 문제를 보다 직관적이고 효율적으로 해결할 수 있도록 설계됩니다. 범용 프로그래밍 언어(General-Purpose Language, GPL)와는 달리, 특정 작업을 수행하는 데 초점을 맞춘 것이 특징입니다.DSL의 장점가독성 향상: 도메인 전문가가 코드의 의미를 쉽게 이해할 수 있음생산성 증가: 특정 문제를 해결하는 데 필요한 코드량을 줄여 빠르게 개발 가능추상화 제공: 내부 구현을 숨기고 도메인과 직결된 개념을 제공오류 감소: 특정 도메인에서 자주 발생하는 실수를 방지하는 구조 설계 가능2. Swift에서 DSL 구현 방법Swift에서는 함수형 프로그래밍 ..

[Swift] Mirror 타입

Swift에서 리플렉션(Reflection)은 코드가 런타임에서 자신의 속성을 검사하고 수정할 수 있도록 해주는 강력한 기능입니다. 이를 위해 Swift는 Mirror 타입을 제공하며, 이를 활용하면 객체의 프로퍼티를 탐색하고, 구조를 동적으로 이해할 수 있습니다.이 글에서는 Mirror의 개념을 설명하고, 실제 코드 예제와 함께 이를 어떻게 활용할 수 있는지 살펴보겠습니다.1. MirrorMirror는 Swift에서 객체의 메타데이터(프로퍼티, 타입 정보 등)를 추출하는 기능을 제공합니다. 다음과 같은 정보를 제공할 수 있습니다.객체의 타입프로퍼티 목록 및 각 프로퍼티의 값클래스 또는 구조체의 계층 정보Mirror의 기본 구조 2.  Mirror를 이용한 Property 검사다음은 Mirror를 사용하..

[Combine] Combine의 기본 개념 및 예제

Swift Combine이란?애플이 WWDC 2019에서 공개한 Combine은 비동기 이벤트 처리를 위한 프레임워크입니다. 기존의 NotificationCenter, KVO(Key-Value Observing), Completion Handler, Delegation 방식과 달리, Combine을 활용하면 선언형(Declarative) 방식으로 데이터를 처리할 수 있습니다.Combine의 핵심 개념Publisher와 SubscriberPublisher: 데이터를 방출하는 역할을 합니다.Subscriber: 데이터를 받아서 처리하는 역할을 합니다.예제 코드:위 코드에서 Just는 단일 값을 방출하는 Publisher이며, sink는 Subscriber 역할을 합니다.import Combinelet myP..

클라이언트 2025.02.16

[SwiftUI] SwiftUI 성능 최적화: View Rendering을 줄이는 방법

SwiftUI는 선언형 UI 프레임워크로, 자동으로 UI를 업데이트해주는 장점이 있지만,성능을 고려하지 않으면 불필요한 Re-Rendering이 발생할 수 있습니다.이번 글에서는 SwiftUI의 성능을 최적화하는 5가지 방법을 소개합니다.1. @State의 과도한 사용 줄이기잘못된 예제@State가 변경될 때마다 전체 body가 다시 평가되므로 성능 저하가 발생할 수 있습니다.struct CounterView: View { @State private var count = 0 var body: some View { VStack { Text("Count: \(count)") Button("Increment") { ..

클라이언트 2025.02.15