---
# System prepended metadata

title: ' iOS interview 5 '
tags: ["\U0001F4BB 면접 질문"]

---

<h1><center> iOS interview 5 </center></h1>

###### tags: `💻 면접 질문`
###### date: `2025-09-2717:21:33.284Z`

> [iOS interview](https://github.com/JeaSungLEE/iOSInterviewquestions)

# iOS Liquid Glass 적용하기 - Apple Session

## Liquid Glass의 인사이트와 디자인 팁

대부분의 개발자가 Liquid Glass를 적용하는 것은 어려워 리소스를 어떻게 해야하나?

- 디자인 언어를 개편하는 것이 도움이 될까?

Liquid Glass

⇒ Regular vs Clear

Clear ⇒ 영상이 밝든 어둡든 background 색상이 바뀌지 않음 but, clear는 더 투명성을 갖는다.

- 영상을 진행할 때 쓰는 것을 더 추천한다 ⇒ 음악 playback - (미리듣기) / 컨텐츠 재생시 오버링

> Scroll Edge Effect
> 

Soft Style ⇒ iOS Safari와 같은 경우 - 줄여나가는 것에 문제가 있다.

Hard Style

### Component

⇒ 어떻게 가장 효율적으로 Liquid glass를 적용했다고 볼 수 있나?

1. 툴 바
    1. concentric ⇒ 기기 Bazel 기반 Radius를 설정한다. - inner circle 완성
    2. 컨텐츠 레이어에 네비게이션 레이어가 띄어져 있다. ⇒ 오히려 콘텐츠 영역을 많이 사용하지 못하게 만듦
    3. Optical Concentric을 적용함 ⇒ 실제 원형을 매칭하지 않음
    4. System Component를 사용하면 기기 edge에 가까워질 수록 곡률이 조정됨
    5. 위에 44pt / 밑에 48pt를 적용한다.
2. 탭 바
    1. 검색 버튼이 꼭 밑에 있을 필요는 없다.
    2. accessories view ⇒ 탭 바 위에 위치한 뷰 - ex) 애플 뮤직 플레이 바
3. 시트
    1. 팝업을 제공하기 때문에 간단한 작업을 할 수 있다.
    2. Glass Material 안에 Glass Material을 쓰면 좋지 않다.

- https://medium.com/design-warp/skeuomorphism-design-we-learned-to-outgrow-8a24895a80d0

- https://www.google.com/url?sa=i&url=https%3A%2F%2Fmedium.com%2Fdesign-warp%2Fskeuomorphism-design-we-learned-to-outgrow-8a24895a80d0&psig=AOvVaw0ivdF2LcZVqeRRPIv1Djkc&ust=1759018988989000&source=images&cd=vfe&opi=89978449&ved=0CBUQjRxqFwoTCIiryMTW948DFQAAAAAdAAAAABAu

- https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.apple.com%2Fkr%2Fnewsroom%2F2025%2F06%2Fapple-introduces-a-delightful-and-elegant-new-software-design%2F&psig=AOvVaw281CwdmEs7vJLBnS2-bg7A&ust=1759019175997000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCOCc1JvX948DFQAAAAAdAAAAABAE

- https://en.zicos.com/mac/i32293944-How-to-turn-off-and-tone-down-the-iOS-26-features-you-hate-the-most.html

### App Icon

- Symbol은 어떻게 동작하는데?
- Icon Composer ⇒ 디자이너들이 빠르게 커스텀이 가능한 아이콘을 만들 수 있게 제공함
ㅌㅈㅈ
### 오늘 한 것과 좀 더 봐야할 것
1. TaskLocal => 바인딩, TCA 개념 - 실제로 쓰는 사례...

### 다음에 할 것

1. ⭐️ **Shared Mutable State**

2. Task isolation

3. Race Condition 문제

4. Sendable

5. actor 개념만...

## Actor / AsyncStream

- AsyncStream

## Shared Mutable State

> 공유 가변 상태 => 공유가 되면서 변경이 가능한 데이터
> '공유' -> 메모리상 Data, Heap에 담긴 데이터를 여러 쓰레드에서 접근하는 것
> '임계 영역' -> Thread가 접근할 수 있는 공통의 자원 영역
> ##### 공유 가변 상태의 데이터는 Thread-safety 문제가 발생할 수 있다.

### Race Condition 문제
-> 여러 스레드에서 접근했을 때 문제가 발생하는 거 

#### Swift Code상 발생할 수 있는 것들
1. 전역 변수 / static var -> 메모리 상 Data 영역에서 공유가 일어난다.
2. class 타입의 var -> 메모리상 Heap에서 공유가 일어난다.
3. ⭐️closure / Task에 캡쳐된 변수

``` swift
// 3번 Closure / Task에 캡쳐된 변수
func test() {
    var name: String = "테스트"
    Task {
        name = "Liquid glass"
    }
    
    Task {
        name = "Kakao"
    }
    
    Task { [name] in // 이러면 괜찮을걸? 
        var newName = name
        newName = "Apple"
    }
}

```
-> (안진) 그래서 이런 경우에 actor를 사용하면 되는건가요? => Yes but, it's not only solution.
-> (안진) 혹시 이런 경우를 Swift6에서는 컴파일에서 잡아주나요..? 아아 오 그래요? ㅋㅋㅋ 

#### 결론
1. Swift Concurrency는 동시성 문제(Race Condition)을 컴파일 단계에서 미리 발견하도록 해줌
2. 새로운 참조 타입을 도입해 동시성 문제를 해결하려고 함

## Task isolation

> Task isolation을 왜 지켜야하나? Race condition이 발생하지 않는 안전한 작업 처리

#### 전제 조건
1. 서로 다른 작업 간에 Share Mutable State를 방지함

(안진)
네 저는 찾다보니 **actor isolation** 언급이 많네요
그래서 이 개념이 어떻게 다른지 보고 있었어요

Task isolation은 Task 내부 정의된 값은 해당 Task만 접근? 다른 Task와 공유되지 않음
근데 클로저 캡처, 전역 변수, 참조 타입등을 공유하는 순간
isolation이 깨지면서 race condition 가능

=> 각각 다른 스레드에서 발생하는 Task 작업 간의 안전한 타입 전달이 Task isolation을 지켜줄 수 있다.

Actor isolation은 공유해야 하는 상태가 있다면, 안전하게 다룰 수 있도록 함
그래서 공유하고 싶은거 있음? Task는 원래 isolation해야 하는데
Actor로 해서 써라 이런 느낌 같은데요?
그럼 Actor가 알아서 공유 상태 관리해줌 한 번에 한 스레드만 접근하게 할게.. 이런거?

nonisolated? (태현) @MainActor 처리가 되어 있거나 Actor 등으로 isolation 되어 있으면
일부러 격리를 깨버리는것 같아요... -> 안진이 쓰긴 함.. ㅜㅜ
=> (태윤) 이건 actor isolated를 보고 이야기 하는게 좋겠다.

```

non
백그라운드로 돌린다
@concurrent
func a() { }

```
Task isolation 결국 -> actor 해라 이 개념 아닌가요?

### Task isolation '법칙'을 깨는 경우
- 'race condition' 안 일어나도록 컴파일러가 보장?
- 근데 

```swift

struct Hello {
    var value = 0
    mutating func increment() {
        value += 1
    }
}

// Closure, Task Capture된 변수 위배
func breakTaskIsolated() {
    var hello = Hello()
    Task { // 여기서 hello 변수는 heap에 캡쳐됨
        hello.increment()
    }
    
    sleep(3)
    print(hello.value) // 1 - 엥간하면?
}

```
-> 오류는 안뜸
사실 Task isolation은 그냥 어떤 개념같은 수준이군요?
깨면 깨지고 변수 잘못 참조해오면 그냥 개발자 잘못으로 깨지고

> "Task isolation은 “공유하지 않는 게 원칙”이라는 Swift Concurrency의 기본 철학을 코드 레벨에서 구현한 규칙"

ㅋㅋㅋ그래서 Swift6 올리려면 망하는.. 근데 그게 가능한가..

## Sendable

> 여러 쓰레드에서 공유가 가능하다는 것을 보장하는 Protocol

Swift에서 안전함이 보장된 타입은 그냥 채택만 해도 된다.

##### Sendable은 Marker Protocol
- 요구사항이 따로 없는 프로토콜 / 단순히 동시성 영역 간 전달이 안전한 타입이라는 것을 컴파일러에게 알려줌
```swift
// marker protocol
public protocol Sendable {

}

// Lint: Stored property 'name' of 'Sendable'-conforming class 'Test' is mutable; this is an error in the Swift 6 language mode
final class Test: Sendable {
    var name: String // final 해서 원래 오류나 경고 없었는데, 변수 생기면서 린트뜸
    static var greeting: String = "hi" // 이건 오류 안뜸
}
```

- 프로토콜로서는 아무 구현 요구사항이 없으나,
- 컴파일러가 특별히 해석해서 검증을 수행함

(sendable한 친구들) - 컴파일러가 음 Sendable 하구만... 하고 넘어가는 친구들
- 값 타입
- Immutable class - var 없는 값 타입인 저장 프로퍼티 + final로 상속 불가 (class 내부에 static 변수가 있으면..? 상관 없나? => static 변수 따로 Sendable 하지 않음)
    - class에서 sendable을 채택하면 내부 저장프로퍼티도 sendable 해야함 
- NSLock, Semaphore로 class 내부에서 동기화처리 -> 이걸 컴파일러가 파악을 하나?
- Actor 타입 
- Functions and closures (by marking them with @Sendable)

(태현)

- Sendable은 Thread Safe한 타입으로 만드는 건 아니지만, 애초에 Sendable을 채택한 객체는 안전하다고 인식한다? 
ㅋㅋㅋㅋㅋㅋㅋ

#### 제네릭 타입에서 Sendable
```swift
struct Pair<T, U> { }
extension Pair: Sendable where T: Sendable, U: Sendable { }
```

# 잠깐 Continuation

Continuation은 하지만 불안정하다..?
someLegacyAPI error에 대한 대응이 없다?
근데 아예 바꾸는게 쉽지 않으니.. 이런걸 제공해준게 아닐까...
ㅋㅋㅋㅋㅋ쓰레기의 쓰레기.. 공감합니다

```swift
func fetchData() async -> String {
    await withCheckedContinuation { continuation in
        someLegacyAPI { result in
            continuation.resume(returning: result)
        }
    }
}

func fetchData() async throws -> String {
    try await withCheckedThrowingContinuation { continuation in
        someLegacyAPI { result, error in
            if let error = error {
                continuation.resume(throwing: error)
            } else {
                continuation.resume(returning: result!)
            }
        }
    }
}
```

(참고)
문득 궁금해서 가져왔는데 파트2에 나오긴 하네요!

(2) Part - 2에서 주로 다루는 내용 (본 강의) ⭐️⭐️⭐
동시성 프로그래밍을 Computer Science 관점에서 이해하기 (쓰레드/메모리 구조의 이해)
Data Isolation / Task Isolation / Actor Isolation (격리 개념의 이해)
Task Isolation과 Shared Mutable State (공유 데이터)
Sendable 타입 (쓰레드 간에 공유해도 안전한 데이터 타입)
Actor 완전 정복 (1) 격리/비격리 (2) 원자성 (3) 재진입 (4) 액터 홉핑

(5) 메인액터 블로킹 (6) 액터 경합 해결하기
글로벌 액터와 메인액터
액터로 캐시(cache) 구현하기 프로젝트 예시
AsyncSequence (비동기 시퀀스)와 AsyncStream (비동기 스트림)
웹소켓에 AsyncStream 적용하기 프로젝트 예시
Non-Sendable 타입의 전송 (sending)
함수(클로저)의 격리 관련 문제 - isolated (Actor)? = #isolation / @isolated(any)
Custom 실행자(Executor)의 구현 / Task 실행자(Executor) 선호도
(참고) consume / consuming 키워드
액터의 문법 규칙 심화 - 생성자 / 소멸자 / 프로토콜 / 상속 / 확장
Swift5 에서 Swift6로 넘어가기
Instruments 사용해서 프로젝트 분석하기



### 다음주
- Actor

일단 각잡고 공부를 빡세개 해올게요 죄송해욥
강제강제 긴급긴급

(저 담주 외부 미팅만 4개라 흠.. 흠.. 네.. 퉤,,) 오!
오 조아요 그리고 저희 추석에도 빡세게 해봐요
ㅎㅎㅎㅎㅎㅎㅎㅎㅎ 아뇹 집 예정
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
암튼 담주 액터 해오겠어요

- 추석 때 뭐 할지?

Concurrency ?
Combine ?
저는 회사에서 AI 하는게 있어서 그것도 봐야해요 RAG(래그)+랭체인 어쩌구.. 퉷

암튼 뭐볼지 생각해볼게요
굿굿!! 던지기
> 이번주에 던지고 투표 후 결정
> 1. Coordinator?
> 2. 디자인 패턴 ? 훔냐 넵
> 3. Unit Test를 공부하고 적용하기
> 4. 토스 과제 피드백하기


https://github.com/DeveloperAcademy-POSTECH/2024-MacC-A10-Akdong-Cookiez

-> 이거 Coordinator 이름의 무언가가 포함되어있는 플젝
-> 이거 UnitTest도 찔끔 들어가 있음 ㅋㅋ큐ㅠㅠㅠㅠ

함수형.. 허허

너무 많아요