본문 바로가기
iOS (Swift)

[오늘의 코드 조각] [iOS 2-4] 클래스와 구조체 : 객체지향 vs 값 타입, Swift가 구조체를 사랑하는 이유

by 생각하는 개발자님 2026. 2. 11.
반응형

안녕하세요, **'생각하는 개발자'**입니다.

안드로이드에서 데이터를 묶을 때 우리는 주로 class나 data class를 사용합니다. iOS의 Swift에도 클래스가 존재하지만, 독특하게도 애플은 구조체(Struct) 사용을 강력하게 권장합니다.

도대체 클래스와 구조체는 무엇이 다르길래 그럴까요? 오늘은 이 두 개념의 차이를 통해 Swift가 추구하는 **'안전한 데이터 관리'**의 핵심을 파악해 보겠습니다.

데이터의 참조(Class)와 복사(Struct) 개념 차이를 시각화한 기술 일러스트


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) // 출력: "재미있니?" (원본이 바뀌어버림!)

2.4.2 구조체(Struct) : 복사되는 값 📜

비유: 엑셀 파일 다운로드 Swift의 주인공인 구조체는 **값 타입(Value Type)**입니다. 데이터를 전달할 때마다 새로운 복사본을 만들기 때문에, 복사본을 수정해도 원본은 안전하게 보존됩니다.

 

struct IOSDeveloper {
    var name: String
}

var devC = IOSDeveloper(name: "생각하는 개발자")
var devD = devC // 값을 복사 (새로운 독립된 데이터 생성)
devD.name = "재미있니?"

print(devC.name) // 출력: "생각하는 개발자" (원본이 안전하게 유지됨!)

2.4.3 왜 Swift는 구조체를 사랑할까? 🚀

애플이 구조체를 권장하는 이유는 명확합니다. 바로 **'의도치 않은 데이터 변경'**을 막기 위해서입니다.

  1. 안전성: 멀티태스킹 환경에서 여러 코드가 동시에 데이터를 수정하려 할 때, 클래스보다 훨씬 안전합니다.
  2. 속도: 메모리의 스택(Stack) 영역을 사용하여 참조 타입보다 처리 속도가 매우 빠릅니다.
  3. SwiftUI의 핵심: 우리가 나중에 배울 최신 UI 프레임워크인 SwiftUI의 모든 뷰(View)는 구조체로 설계되어 있습니다.

📝 핵심 포인트 요약

  1. **클래스(Class)**는 '공유' 개념입니다. 원본 데이터의 주소를 주고받습니다.
  2. **구조체(Struct)**는 '복사' 개념입니다. 독립된 데이터를 주고받아 안전합니다.
  3. Swift에서는 일단 구조체로 만들고, 상속이나 참조 공유가 꼭 필요할 때만 클래스를 사용합니다.
  4. [GitHub 소스 코드 링크]
반응형