








struct를 사용하는 프로그래밍언어를 모두다 알려줘
struct를 지원하는 프로그래밍 언어
카드를 클릭하면 각 언어별 struct 코드 예제를 볼 수 있어요!
언어별 struct 핵심 차이 요약:
| struct 키워드 그대로 사용 | C, C++, C#, Swift, Rust, Go, Zig, V | 키워드 동일 |
| struct 대신 다른 방식 사용 | Kotlin (data class), Python (@dataclass), TypeScript (interface), Scala (case class) | 키워드 다름 |
| class가 아예 없고 struct만 있음 | Go, Rust | struct가 유일한 객체 표현 |
| 값 타입 struct | Swift, C, C++, C#, Rust, Go | 복사 시 독립적인 복사본 생성 |
| 참조 타입 struct 대용 | Kotlin, Python, Scala | 복사 시 같은 객체를 가리킴 |
Swift에서 class 대신 struct를 더 많이 쓰는 이유가 바로 값 타입이라서 예상치 못한 데이터 변경을 막아주기 때문이에요! 🛡️








x와 y은 전혀 별개라는 것이다.

스위프트에서 왜 이런 결과가 나온지 이해가 안되서 그런데 설명해줘
class는 참조 타입! 이게 핵심이에요
코드 분석
class Human {
var age: Int = 1
}
var kim = Human()
var lee = kim // ⚠️ 값 복사가 아니라 "같은 객체를 가리킴"!
핵심 개념 — 참조 타입 시각화
kim ──┐
├──→ [ Human 객체: age = 1 ] ← 메모리 어딘가에 딱 하나 존재
lee ──┘
var lee = kim 은 kim을 복사한 게 아니라 kim이 가리키는 곳을 lee도 같이 가리키게 된 것! 즉 kim과 lee는 같은 객체를 공유해요
한 줄씩 실행 추적
var kim = Human()
var lee = kim
// kim → [age: 1]
// lee → [age: 1] (같은 객체!)
print(kim.age, lee.age)
// 결과: 1 1 ← 당연히 둘 다 같음
lee.age = 20
// lee를 통해 나이를 바꿨는데...
// kim과 lee가 같은 객체라서 kim.age도 바뀜!
//
// kim → [age: 20]
// lee → [age: 20] (여전히 같은 객체!)
print(kim.age, lee.age)
// 결과: 20 20 ← lee만 바꿨는데 kim도 20!
kim.age = 30
// 이번엔 kim을 통해 바꿔도 마찬가지
// kim → [age: 30]
// lee → [age: 30] (같은 객체!)
print(kim.age, lee.age)
// 결과: 30 30
class vs struct 비교
// ❌ class = 참조 타입 (같은 객체 공유)
class HumanClass {
var age: Int = 1
}
var kim = HumanClass()
var lee = kim // 같은 객체를 가리킴
lee.age = 20
print(kim.age) // 20 ← kim도 바뀜!!
// ✅ struct = 값 타입 (복사본 생성)
struct HumanStruct {
var age: Int = 1
}
var kim2 = HumanStruct()
var lee2 = kim2 // 완전히 독립된 복사본 생성
lee2.age = 20
print(kim2.age) // 1 ← kim2는 그대로!!
메모리 구조로 이해하기
[ class 참조 타입 ]
kim → 주소: 0x001
lee → 주소: 0x001 ← 같은 주소를 가리킴!
메모리 0x001: [ age: 1 → 20 → 30 ]
↑
lee가 바꿔도 kim에 반영
kim이 바꿔도 lee에 반영
[ struct 값 타입 ]
kim2 → [ age: 1 ] ← 독립된 공간
lee2 → [ age: 1 ] ← 독립된 복사본
↑
lee2를 바꿔도 kim2는 절대 안 바뀜!
한 줄 요약
| class (참조) | 같은 객체를 함께 가리킴 | kim도 같이 바뀜 😱 |
| struct (값) | 독립된 복사본 생성 | kim은 그대로 ✅ |
💡 핵심: class는 변수에 객체 자체가 담기는 게 아니라 객체가 있는 주소가 담겨요. 그래서 lee = kim 하면 주소를 복사하는 거라 둘 다 같은 객체를 건드리게 되는 거예요!
23페이지에 있는 예제는 제외

iOS앱 개발에서 클래스와 구조체를 선택하는 기준이 머야?
iOS 앱 개발 — class vs struct 선택 기준
핵심 차이 한 줄 요약
struct = 값 타입 → 복사 시 독립적인 복사본
class = 참조 타입 → 복사 시 같은 객체 공유
struct를 선택하는 경우 ✅
1. 단순한 데이터 묶음
// ✅ 좌표, 크기, 색상 같은 단순 데이터
struct Point {
var x: Double
var y: Double
}
struct Size {
var width: Double
var height: Double
}
struct Color {
var red: Double
var green: Double
var blue: Double
}
2. 데이터 모델 (서버에서 받아오는 JSON)
// ✅ 서버 응답 데이터는 struct가 적합
struct User: Codable {
let id: Int
let name: String
let email: String
}
struct Post: Codable {
let title: String
let content: String
let author: User
}
3. SwiftUI 뷰 모델
// ✅ SwiftUI는 struct 기반
struct ContentView: View {
var body: some View {
Text("안녕!")
}
}
class를 선택하는 경우 ✅
1. UIKit 뷰 / 뷰컨트롤러
// ✅ UIKit은 class 기반
class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
class CustomButton: UIButton {
// UIButton 상속 → 반드시 class!
}
2. 상속이 필요할 때
// ✅ 상속 구조가 필요하면 class
class Animal {
var name: String
init(name: String) { self.name = name }
func speak() { }
}
class Dog: Animal {
override func speak() {
print("\(name): 멍멍!")
}
}
class Cat: Animal {
override func speak() {
print("\(name): 야옹!")
}
}
// ❌ struct는 상속 불가!
struct Animal { }
struct Dog: Animal { } // 컴파일 에러!
3. 여러 곳에서 같은 객체를 공유해야 할 때
// ✅ 앱 전체에서 하나만 존재해야 하는 것
class UserSession {
static let shared = UserSession() // 싱글톤
var isLoggedIn: Bool = false
var currentUser: User?
private init() { }
}
// 어디서든 같은 객체 접근
UserSession.shared.isLoggedIn = true
4. 생명주기 관리가 필요할 때
// ✅ 네트워크, 데이터베이스 등 리소스 관리
class NetworkManager {
private var session: URLSession
init() {
session = URLSession.shared
}
deinit {
// 메모리 해제될 때 정리 작업
print("NetworkManager 해제됨")
}
func fetchData(url: String) { }
}
Apple 공식 권장 기준
다음 중 하나라도 해당하면 class 사용:
1. ☑️ Objective-C 코드와 함께 써야 할 때
2. ☑️ 상속이 필요할 때
3. ☑️ 참조를 공유해야 할 때
4. ☑️ deinit이 필요할 때
나머지는 전부 struct 사용! ✅
실전 iOS 프로젝트 예시
// ✅ struct — 데이터 모델
struct Product: Codable {
let id: Int
let name: String
let price: Int
}
// ✅ struct — UI 상태
struct CartState {
var items: [Product] = []
var totalPrice: Int {
items.reduce(0) { $0 + $1.price }
}
}
// ✅ class — 뷰컨트롤러
class CartViewController: UIViewController {
var state = CartState()
override func viewDidLoad() {
super.viewDidLoad()
}
}
// ✅ class — 싱글톤 매니저
class CartManager {
static let shared = CartManager()
private var cart = CartState()
private init() { }
func addItem(_ product: Product) {
cart.items.append(product)
}
}
한눈에 비교 정리
| 데이터 모델 (JSON 등) | ✅ 적합 | 가능 |
| SwiftUI 뷰 | ✅ 필수 | ❌ |
| UIKit 뷰/뷰컨트롤러 | ❌ | ✅ 필수 |
| 상속 | ❌ 불가 | ✅ 가능 |
| 싱글톤 | ❌ | ✅ 적합 |
| 데이터 공유 | ❌ 복사됨 | ✅ 공유됨 |
| 성능 | ✅ 빠름 (스택) | 보통 (힙) |
| 멀티스레드 안전 | ✅ 비교적 안전 | ⚠️ 주의 필요 |
💡 결론:
- SwiftUI 개발 → struct 위주로 작성
- UIKit 개발 → UIViewController, UIView 등은 class 필수
- 데이터 모델 → 거의 항상 struct
- 공유·상속·UIKit → class
모르겠으면 일단 struct 로 만들고, 컴파일러가 class 쓰라고 하거나 상속이 필요해지면 그때 class로 바꾸면 돼요! 🎯