[Swift] Result 타입 설계
·
iOS/이론
안녕하세요, 욱승입니다 👋오늘은 Result 타입을 정리해보겠습니다성공과 실패를 하나의 타입으로 깔끔하게 표현하는 Swift의 핵심 열거형인데, 에러 처리 패턴을 이해하면 코드 품질이 확 올라갑니다1. Result란?성공(Success)과 실패(Failure)를 하나의 제네릭 열거형으로 표현하는 타입입니다// Swift 표준 라이브러리의 정의@frozen enum Result { case success(Success) case failure(Failure)}Success: 성공 시 반환할 값의 타입Failure: 실패 시 반환할 에러의 타입 (Error 프로토콜 준수 필수)enum NetworkError: Error { case invalidURL case noData cas..
[Swift] @autoclosure 이해하기
·
iOS/이론
안녕하세요, 욱승입니다 👋오늘은 @autoclosure를 정리해보겠습니다표현식을 자동으로 클로저로 감싸주는 기능인데, 언제 왜 쓰는지 알면 코드가 훨씬 깔끔해져요1. @autoclosure란?인자로 전달된 표현식을 자동으로 클로저로 감싸주는 속성입니다// @autoclosure 없이func log(message: () -> String) { print(message())}log(message: { "에러 발생" }) // 중괄호 필요// @autoclosure 사용func log(message: @autoclosure () -> String) { print(message())}log(message: "에러 발생") // 중괄호 없이 표현식만 전달"에러 발생"이라는 표현식이 자동으로 { "..
[Swift] @escaping vs non-escaping Closure
·
iOS/이론
안녕하세요, 욱승입니다 👋오늘은 @escaping 클로저와 non-escaping 클로저의 차이를 정리해보겠습니다클로저가 함수 밖으로 "탈출"하느냐 아니냐에 따라 메모리 관리 방식이 완전히 달라져요1. non-escaping 클로저 (기본값)함수의 실행이 끝나기 전에 호출되고, 함수가 리턴되면 사라지는 클로저입니다Swift에서 클로저 파라미터는 기본이 non-escaping입니다func doSomething(closure: () -> Void) { closure() // 함수 안에서 바로 실행} // 함수 끝 → 클로저도 사라짐doSomething 호출 → closure() 실행 → 함수 리턴 → 끝 ↑ 함수 범위 안에서만 살아있음특징self 캡처 시 self..
[Swift] map vs flatMap 차이
·
iOS/이론
안녕하세요, 욱승입니다 👋오늘은 Swift에서 자주 쓰이는 map과 flatMap의 차이를 정리해보겠습니다둘 다 값을 변환하는 고차함수지만, 중첩된 구조를 어떻게 처리하느냐에서 결정적 차이가 있어요1. map — 변환만 한다map은 컨테이너 안의 각 요소에 변환 함수를 적용하고, 결과를 그대로 다시 감싸서 반환합니다let numbers = [1, 2, 3]let doubled = numbers.map { $0 * 2 }// [2, 4, 6]핵심: 컨테이너 구조는 그대로 유지하고, 안의 값만 바꿉니다2. flatMap — 변환 + 평탄화flatMap은 변환 결과가 중첩 컨테이너일 때, 한 겹을 벗겨서 평탄화(flatten)합니다Array에서의 flatMaplet sentences = ["Hello Wor..
[Swift] associatedtype 동작 원리
·
iOS/이론
안녕하세요, 욱승입니다 👋오늘은 associatedtype의 동작 원리를 정리해봤습니다프로토콜에서 제네릭처럼 타입을 추상화하는 핵심 도구인데, 내부적으로 어떻게 동작하는지 깊이 파보겠습니다1. 기본 개념associatedtype은 프로토콜 내에서 사용되는 플레이스홀더 타입으로, 프로토콜을 채택하는 타입이 구체적인 타입을 결정합니다protocol Container { associatedtype Item // 아직 구체 타입이 정해지지 않음 func append(_ item: Item) func get(at index: Int) -> Item}채택하는 쪽에서 Item이 무엇인지 결정합니다struct IntStack: Container { typealias Item = Int // ..
[RxSwift] 심화 과정 정리
·
iOS/RxSwift
안녕하세요, 욱승입니다 👋오늘은 RxSwift 심화 과정을 정리해봤습니다기초 문법을 넘어서, 실무에서 자주 마주치는 패턴들과 면접에서 깊이 있는 답변을 할 수 있는 주제들을 다뤄볼게요Traits (Single, Completable, Maybe)Observable은 범용적이지만, 때로는 더 명확한 의미를 가진 타입이 필요해요Traits는 Observable을 래핑해서 특정 상황에 맞는 제약을 걸어둔 타입입니다Single성공(값 1개) 또는 실패 두 가지만 있어요. API 호출에 딱 맞습니다func fetchUser(id: Int) -> Single { return Single.create { single in APIService.getUser(id: id) { result in ..
[RxSwift] 기초 문법 정리
·
iOS/RxSwift
RxSwift 기초 문법 정리안녕하세요, 욱승입니다 👋오늘은 RxSwift의 기초 문법을 정리해봤습니다비동기 처리를 스트림 기반으로 깔끔하게 다룰 수 있게 해주는 라이브러리인데요면접에서도 "RxSwift 써보셨나요?"로 시작해서 "Subject 종류 차이가 뭔가요?"까지 꼬리질문 오는 단골 주제입니다Observable이 뭐냐면데이터를 방출하는 스트림이에요Observable은 3가지 이벤트를 발생시킵니다이벤트설명onNext새로운 값을 방출onError에러 발생 후 스트림 종료onCompleted정상 종료시간 → ──①──②──③──| next next next completedObservable은 구독(subscribe)하기 전까지는 아무것도 안 해요Cold Observable이라고..
[Swift] Existential Type vs Generic 차이 정리
·
iOS/이론
안녕하세요, 욱승입니다 👋Swift에서 프로토콜을 사용하는 방식은 크게 두 가지예요Existential Type (any) 과 Generic (some, ) 인데, 겉보기엔 비슷해 보여도 내부 동작과 성능이 완전히 다릅니다오늘은 이 둘의 차이를 깊이 파헤쳐볼게요 1. 핵심 차이 한눈에 보기 Existential (any)Generic (some / )타입 결정 시점런타임컴파일 타임디스패치Dynamic (PWT)Static (인라이닝 가능)메모리Existential Container (최대 40바이트)타입 크기 그대로다른 타입 섞기✅ 가능❌ 불가associatedtype 사용❌ 제한적 (Swift 5.7+부터 일부 가능)✅ 자유롭게 사용성능상대적으로 느림빠름 (최적화 유리) 2. Existential T..
[Swift] Dispatch 메커니즘- Static vs Dynamic vs Protocol Witness Table
·
iOS/이론
Swift Dispatch 메커니즘 정리 - Static vs Dynamic vs Protocol Witness Table안녕하세요, 욱승입니다 👋이전 글에서 Struct vs Class 메모리 구조랑 ARC 동작 방식을 다뤘는데요오늘은 메서드를 호출할 때 Swift가 내부적으로 어떻게 함수를 찾아서 실행하는지 정리해봤습니다면접에서 "Static Dispatch와 Dynamic Dispatch 차이가 뭔가요?" 이런 질문이 나오면이 글 하나로 정리할 수 있을 거에요1. 개요Swift에서 메서드 호출 방식은 크게 세 가지로 나뉩니다방식결정 시점속도사용 조건Static Dispatch컴파일 타임가장 빠름struct, enum, final class, static/class finalDynamic Dispa..
[Swift] ARC 동작 방식
·
iOS/이론
Swift ARC 동작 방식 정리안녕하세요, 욱승입니다 👋이전 글에서 Class는 Heap에 할당되고 refCount로 관리된다고 했는데요오늘은 그 refCount를 관리하는 주체인 ARC(Automatic Reference Counting) 가 어떻게 동작하는지 깊게 파봤습니다.면접에서도 "ARC가 뭔가요?"로 시작해서 "순환 참조 어떻게 해결하나요?"까지 꼬리질문 오는 단골 주제입니다ARC가 뭐냐면Automatic Reference Counting, 말 그대로 참조 횟수를 자동으로 세주는 메모리 관리 방식이에요class 인스턴스가 생길 때마다 ARC가 해당 객체를 몇 군데서 참조하고 있는지 추적하고참조하는 곳이 0개가 되면 메모리에서 해제해요인스턴스 생성 → refCount = 1변수가 참조 추가 ..
[Swift] Struct vs Class 메모리 구조
·
iOS/이론
Swift Struct vs Class, 메모리 구조 정리안녕하세요, 욱승입니다 👋오늘은 면접 단골 질문이자 실제로 코드 짜다 보면 한 번씩 고민되는 그것.."이거 struct로 해야 하나 class로 해야 하나"에 대해서 메모리 레벨로 정리해봤습니다.그냥 "struct는 값 타입, class는 참조 타입" 이것만 외우면 언젠가 한 번은 당하거든요Stack이냐 Heap이냐, 그게 핵심┌─────────────────────────────────────────────┐│ Memory ││ ││ ┌──────────────┐ ┌───────────────..
GhostAction 공격 정리: GitHub 워크플로우 해킹으로 시크릿 유출된 사건
·
iOS/버그 및 이슈
GhostAction 캠페인 & 내 경험 정리안녕하세요, 욱승입니다!최근 저도 얄미운(?) GhostAction 캠페인에 걸려서… 블로그에 기록 남겨봅니다.읽는 분들도 비슷한 상황이 생기지 않도록, 이해하기 쉽게 풀어봤습니다.뭐가 문제였냐면...GhostAction 캠페인이 뭐냐면2025년 9월 5일, GitGuardian이 발견한 대형 보안 사고입니다.총 327명 사용자, 817개 리포지토리에서 3,325개 시크릿이 유출됐어요.:contentReference[oaicite:0]{index=0}공격 방식.github/workflows/github_actions_security.yml라는 이름으로 워크플로우 파일이 악성으로 바뀌었고,시크릿(토큰 등)이 특정 외부 서버로 HTTP POST 방식으로 빼돌려졌습..
욱승
'iOS' 카테고리의 글 목록