모바일 개발 · 중급
Swift에서 구조체(Struct)와 클래스(Class)의 주요 차이점을 메모리 관리 및 데이터 전달 관점에서 설명하고, 각각 어떤 상황에서 사용하는 것이 적절한지 구체적인 사용 사례와 함께 비교하여 설명해주세요.
힌트 · 구조체는 값 타입으로 스택에 저장되고 복사되며, 클래스는 참조 타입으로 힙에 저장되고 참조됩니다. 불변성, 상속, 성능 등을 고려하여 선택합니다.
값 타입참조 타입스택 메모리힙 메모리상속
모범답안
네, Swift에서 구조체와 클래스의 주요 차이점을 설명드리겠습니다.
가장 큰 차이는 메모리 관리 방식입니다. 구조체는 값 타입으로, 변수에 할당하거나 함수에 전달할 때 값이 복사됩니다. 따라서 스택 메모리에 저장되며, 불변성을 유지하기 쉽습니다. 반면 클래스는 참조 타입으로, 변수에 할당하거나 전달할 때 메모리 주소가 복사됩니다. 힙 메모리에 저장되며, 여러 곳에서 동일한 인스턴스를 참조할 수 있습니다.
데이터 전달 관점에서 보면, 구조체는 값을 복사하므로 원본 데이터가 변경되지 않습니다. 클래스는 참조를 전달하므로, 한 곳에서 변경하면 다른 곳에서도 변경된 값이 반영됩니다.
사용 사례를 비교하자면, 구조체는 좌표(x, y), 색상(red, green, blue)처럼 간단하고 불변성이 중요한 데이터에 적합합니다. 클래스는 UIViewController, 데이터 관리 객체처럼 상태를 가지고 상속이 필요한 경우에 적합합니다. 예를 들어, struct Point { var x: Int; var y: Int } 와 같이 간단한 데이터 모델을 만들 때는 구조체를 사용하는 것이 좋습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 iOS / Swift 면접 질문
- Swift의 `Extension`이 무엇이며, 기존 클래스, 구조체, 열거형 또는 프로토콜에 어떤 기능을 추가할 수 있는지 설명해주세요.
- Swift의 `Enum` (열거형)은 무엇이며, 원시 값(Raw Value)과 연관 값(Associated Value)의 차이점을 설명하고 각각의 사용 예를 들어주세요.
- iOS 앱 개발 시 ARC(Automatic Reference Counting)가 어떻게 동작하는지 설명하고, 강한 참조 순환(Retain Cycle)이 발생하는 대표적인 상황과 이를 해결하는 방법에 대해 구체적인 코드 예시 없이 개념적으로 설명해주세요.
- iOS 앱에서 비동기 작업을 처리하기 위해 GCD(Grand Central Dispatch)를 사용하는 경우, `DispatchQueue.main.async`와 `DispatchQueue.global().async`의 차이점을 설명하고, 각각 어떤 용도로 사용되는지 예시를 들어 설명해주세요.
- Swift에서 델리게이트(Delegate) 패턴은 어떤 목적으로 사용되며, 이를 구현하기 위한 핵심적인 요소(프로토콜, weak 키워드 등)들을 설명하고, 델리게이트 패턴이 NotificationCenter나 KVO에 비해 가지는 장점은 무엇인지 설명해주세요.
- Swift의 에러 처리(Error Handling) 방식에 대해 설명하고, `do-catch`, `try?`, `try!`의 각각의 용도와 차이점을 구체적인 상황과 연결하여 설명해주세요.