← 홈으로 돌아가기

📝 Daily Learning Log (2026-07-06 ~ 07-12)

주간 학습일지 · 2026-07-06 ~ 07-12

2026-07-06 (일)

학습 주제

오답노트 — PAT vs Generic

  • 착각: "Container<Int>의 <Int>도 제네릭 아닌가?" → 정정: 생김새는 같지만 역할이 다름. 제네릭=타입 파라미터, PAT=Associated Type 지정
  • 착각: "Generic 함수는 c의 내부를 모른다" → 정정: 프로토콜 인터페이스는 다 안다. 모르는 건 Associated Type의 구체 타입뿐

escaping vs non-escaping 메모리

PC · FP · SP 레지스터

캡처 변수와 ARC 동작

Capture List와 참조 타입

✅ 정리 완료: any/some/Generic/PAT + escaping 메모리 + PC/FP/SP 레지스터 + ARC 동작 + Capture List

2026-07-07 (월)

학습 주제

✅ 정리 완료: VIEW_LAYOUT_PROCESS_DEEP_DIVE.html #qna-2026-07-07

오후 학습

📕 오답노트

  • let dog: Dog = Dog.self 가능? → ❌ 불가. Dog.selfDog.Type 타입, Dog()Dog 타입. 타입 불일치.
  • Dog.selfDog() 같아? → ❌ 완전히 다름. 전자는 타입 자체, 후자는 인스턴스.
  • type(of: a) == Dog.Type? → ❌ 컴파일 에러. .Type은 타입이라 비교 불가. type(of: a) == Dog.self 사용.
  • a.Type 가능? → ❌ 문법 에러. 인스턴스에서 타입 알려면 type(of: a) 사용.
✅ 정리 완료: SWIFT_METATYPE_SELF_TYPE_IMPLEMENTATION.html

디스패치 복습 문제 (오래된 오답노트 기반)

📕 오답노트 — vtable · 가시성 vs 디스패치

  • 착각: "vtable은 인스턴스마다 있다" → 정정: 클래스마다 하나. 인스턴스는 metadata를 가리키는 isa 포인터 1개만 가짐. 같은 클래스 인스턴스는 vtable 공유. 오버라이드=서브클래스 vtable 슬롯 교체
  • 위치: vtable은 데이터 세그먼트(함수 주소 배열=데이터). 코드 세그먼트엔 vtable이 가리키는 함수 본문
  • 가시성 vs 디스패치: 선언 타입(Parent)=무엇을 부를 수 있나(컴파일), 실제 타입(Child)=어느 구현이 실행(런타임 vtable). let x:Parent=Child()에서 x.run()은 Child, x.onlyChild()는 컴파일 에러
  • inline 두 의미: 함수 인라이닝(호출 제거 최적화) vs inline 저장(힙 박스 없이 직접 저장)
  • 👉 정리: 디스패치 복습 Q&A (2026-07-07)

2026-07-08 (수)

학습 주제 — 모듈화 · 빌드 · 링킹

📕 오답노트 — 링킹 중복

  • 착각: "framework면 dynamic이다" → 정정: framework는 포장, 알맹이가 static/dynamic
  • 착각: "Mach-O는 dynamic만의 형식" → 정정: static도 Mach-O(타입만 다름)
  • 착각: "여러 dynamic이 같은 static 의존하면 알아서 1벌" → 정정: 각자 흡수돼 벌 수만큼 중복(자동 dedup X). dynamic으로 바꿔야 공유
  • 👉 정리: 모듈화·빌드·링킹 Q&A (2026-07-08)

2026-07-09 (목)

학습 주제 — Tuist 의존성 관리 · Static/Dynamic 링킹

📕 오답노트 — 의존성 관리

  • 착각: "productTypes가 staticFramework면 xcodeproj로 변환" → 정정: productTypes는 빌드 타입만 지정. 변환 여부는 패키지 배포 방식(xcframework 여부)에 따름
  • 착각: "Link Binary With Libraries에 Static만 들어감" → 정정: Static/Dynamic 둘 다 들어감. Link는 "사용 선언", Embed는 "복사"
  • 착각: "Tuist는 xcframework 변환만 함" → 정정: 프로젝트 생성, 설정 관리, 의존성 통합이 본질. xcframework 변환은 일부
  • 👉 정리: Tuist 의존성 관리 · 링킹 Q&A (2026-07-09)

학습 주제 — ScrollView 내부 동작 원리 심화

📕 오답노트 — ScrollView 동작

  • 착각: "스크롤하면 subview의 frame이 바뀐다" → 정정: subview.frame은 절대 불변. 부모의 bounds.origin만 변함
  • 착각: "스크롤할 때마다 layoutSubviews 호출" → 정정: bounds.origin 변경은 setNeedsLayout 트리거 안 함 (성능 최적화)
  • 착각: "bounds.origin이 (0,100)이면 자식이 아래로 내려감" → 정정: 보이는 창을 내린 것이므로 자식은 위로 올라간 것처럼 보임
  • 👉 정리: ScrollView 내부 동작 원리 심화

2026-07-10 (금)

학습 주제 — SPM Interface 패턴과 증분 빌드 최적화

📕 오답노트 — SPM · Interface · 증분 빌드

  • 착각: "SPM 기본값은 Dynamic" → 정정: 기본값은 Static. Dynamic은 명시적 지정 필요
  • 착각: "Package(name:)이 의존 해결에 사용됨" → 정정: 표시용일 뿐. URL 마지막 부분이나 폴더명이 package 식별자
  • 착각: "외부 SPM에 Interface 두면 증분 빌드 이득" → 정정: 버전 고정이라 변경 없음. 버전 업 시에만, SDK 타입 숨기면 이득
  • 착각: "App도 Interface만 의존하면 SDK 변경 시 재컴파일 안 됨" → 정정: App은 Adapter 의존하므로 재컴파일됨. Feature들이 이득
  • 착각: "Adapter 추가하면 증분 빌드 이득" → 정정: Interface가 이미 있으면 추가 이득 없음. Adapter는 Unit Test용
  • 착각: "appPackages에 없으면 타겟 의존 불가" → 정정: 다른 패키지가 의존하면 전이적으로 해결되어 사용 가능
  • 착각: "App이 Interface를 import해야 DI 가능" → 정정: 구현체만 넘기면 Swift가 자동 업캐스팅. 타입 명시 시에만 import 필요
  • 👉 정리: SPM Interface 패턴과 증분 빌드 최적화

2026-07-11 (토)

학습 주제 — Swift Concurrency 심화 세션

📕 오답노트 — Concurrency 심화

  • 정정: actor는 "락으로 감싼 것"이 아니라 "직렬 실행자 + suspend"
  • 정정: func는 순수계산이어도 nonisolated 자동 아님 → 명시 필요 (let은 자동)
  • 정정: await 접근은 "동기"가 아니라 "비동기"(hop). 동기=await 없이 즉시
  • 👉 Concurrency 심화+저수준 CS 정리

2026-07-12 (일)

학습 주제 — GCD vs Concurrency + 저수준 CS