반응형
안녕하세요, **'생각하는 개발자'**입니다.
안드로이드에서 데이터를 묶을 때 우리는 주로 class나 data class를 사용합니다. iOS의 Swift에도 클래스가 존재하지만, 독특하게도 애플은 구조체(Struct) 사용을 강력하게 권장합니다.
도대체 클래스와 구조체는 무엇이 다르길래 그럴까요? 오늘은 이 두 개념의 차이를 통해 Swift가 추구하는 **'안전한 데이터 관리'**의 핵심을 파악해 보겠습니다.

2.4.1 클래스(Class) : 공유되는 참조 🏺
비유: 구글 문서 (Shared Document) 클래스는 안드로이드 개발자에게 익숙한 **참조 타입(Reference Type)**입니다. 여러 곳에서 하나의 인스턴스를 가리키기 때문에, 한 곳에서 내용을 수정하면 다른 곳에도 영향을 미칩니다.
class AndroidDeveloper {
var name: String
init(name: String) { self.name = name }
}
let devA = AndroidDeveloper(name: "생각하는 개발자")
let devB = devA // 참조를 복사 (같은 메모리 주소를 가리킴)
devB.name = "재미있니?"
print(devA.name) // 출력: "재미있니?" (원본이 바뀌어버림!)
var name: String
init(name: String) { self.name = name }
}
let devA = AndroidDeveloper(name: "생각하는 개발자")
let devB = devA // 참조를 복사 (같은 메모리 주소를 가리킴)
devB.name = "재미있니?"
print(devA.name) // 출력: "재미있니?" (원본이 바뀌어버림!)
2.4.2 구조체(Struct) : 복사되는 값 📜
비유: 엑셀 파일 다운로드 Swift의 주인공인 구조체는 **값 타입(Value Type)**입니다. 데이터를 전달할 때마다 새로운 복사본을 만들기 때문에, 복사본을 수정해도 원본은 안전하게 보존됩니다.
struct IOSDeveloper {
var name: String
}
var devC = IOSDeveloper(name: "생각하는 개발자")
var devD = devC // 값을 복사 (새로운 독립된 데이터 생성)
devD.name = "재미있니?"
print(devC.name) // 출력: "생각하는 개발자" (원본이 안전하게 유지됨!)
var name: String
}
var devC = IOSDeveloper(name: "생각하는 개발자")
var devD = devC // 값을 복사 (새로운 독립된 데이터 생성)
devD.name = "재미있니?"
print(devC.name) // 출력: "생각하는 개발자" (원본이 안전하게 유지됨!)
2.4.3 왜 Swift는 구조체를 사랑할까? 🚀
애플이 구조체를 권장하는 이유는 명확합니다. 바로 **'의도치 않은 데이터 변경'**을 막기 위해서입니다.
- 안전성: 멀티태스킹 환경에서 여러 코드가 동시에 데이터를 수정하려 할 때, 클래스보다 훨씬 안전합니다.
- 속도: 메모리의 스택(Stack) 영역을 사용하여 참조 타입보다 처리 속도가 매우 빠릅니다.
- SwiftUI의 핵심: 우리가 나중에 배울 최신 UI 프레임워크인 SwiftUI의 모든 뷰(View)는 구조체로 설계되어 있습니다.
📝 핵심 포인트 요약
- **클래스(Class)**는 '공유' 개념입니다. 원본 데이터의 주소를 주고받습니다.
- **구조체(Struct)**는 '복사' 개념입니다. 독립된 데이터를 주고받아 안전합니다.
- Swift에서는 일단 구조체로 만들고, 상속이나 참조 공유가 꼭 필요할 때만 클래스를 사용합니다.
- [GitHub 소스 코드 링크]
반응형
'iOS (Swift)' 카테고리의 다른 글
| [오늘의 코드 조각] [iOS 3-2] 실전 레이아웃: 오토레이아웃으로 로그인 화면 만들기 (Constraints 실습) (0) | 2026.02.13 |
|---|---|
| [오늘의 코드 조각] [iOS 3-1] UIKit의 기초 : 스토리보드와 오토레이아웃(Auto Layout) 핵심 원리 (0) | 2026.02.11 |
| [오늘의 코드 조각] [iOS 2-3] 제어문과 함수 : 조건문, 반복문, 그리고 Swift다운 함수 작성법 (0) | 2026.02.11 |
| [오늘의 코드 조각] [iOS 2-2] Optional : Swift가 안전한 이유 (nil을 다루는 법) (0) | 2026.02.10 |
| [오늘의 코드 조각] [iOS 2-1] Swift 문법 정수 : 변수와 상수의 본질 (let vs var) (0) | 2026.02.10 |