안녕하세요! 꾸준히 노력하는 iOS 개발자 Dave입니다.
오늘은 신입 iOS 개발자 면접 단골 질문인 Class와 Struct에 대해 알아보도록 하겠습니다!!
Class(클래스) - Reference Type(참조 타입)
Class는 객체지향 프로그래밍에서, 데이터와 그 조작 절차인 메소드를 정리한 객체의 추형을 정의한 것입니다.
Class 이름은 대문자 카멜 케이스를 사용하고, 메소드와 프로퍼티의 이름은 소문자 카멜케이스를 사용합니다.
Class는 메모리의 Heap 부분에 저장이 되고, Struct에 비해 느립니다.
그리고 상속이 가능합니다.
class Phone { var phoneName: String var phoneColor: String init(phoneName: String, phoneColor: String) { self.phoneName = phoneName self.phoneColor = phoneColor } } let iPhone8 = Phone(phoneName: "iPhone8", phoneColor: "검정") var iPhone7 = iPhone8 iPhone7.phoneName = "iPhone7" iPhone7.phoneColor = "하얀" print("\(iPhone8.phoneName)은 \(iPhone8.phoneColor)색") // iPhone7은 하얀색 print("\(iPhone7.phoneName)은 \(iPhone7.phoneColor)색") // iPhone7은 하얀색
Class는 참조 타입. 즉 메모리 주소를 사용합니다.
그래서 위 코드를 보면 다른 인스턴스를 생성하여 변수 값을 변경해도 모든 인스턴스의 변수 값이 변하게 됩니다.
Struct(구조체) - Value Type(값 타입)
Struct는 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구입니다.
Struct의 이름은 대문자 카멜 케이스를 사용하고, 메소드와 프로퍼티의 이름은 소문자 카멜 케이스를 사용합니다.
Struct는 메모리의 Stack 부분에 저장되어, Class에 비해 빠릅니다.
그리고 상속이 불가능합니다.
struct NameAge { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } } let b = NameAge(name: "ab", age: 5) var c = b c.name = "ccc" c.age = 1 print("\(b.name)는 \(b.age)살") // ab는 5살 print("\(c.name)는 \(c.age)살") // ccc는 1살
Struct는 값 타입. 즉 값을 복사하여 사용합니다.
그래서 위 코드를 보면 다른 인스턴스를 생성하여 변수 값을 변경해도 해당 인스턴스의 변수 값만 변경됩니다.
Class와 Struct의 쓰임새
사실 "Class와 Struct를 적재적소에 사용하는 것" 이게 가장 중요할 겁니다.
생각해보면 생각보다 간단합니다!
Class는 Heap에 저장되어 느립니다. 하지만 많은 용량의 데이터를 저장할 수 있습니다.
그래서 무거운 코드를 사용할 때, 많은 데이터를 저장할 때 사용됩니다.
ViewController 등을 개발할 때 사용됩니다.
Struct는 Stack에 저장되어 빠릅니다. 하지만 많은 용량의 데이터를 저장할 수 없습니다.
그래서 적은 데이터 저장할 때, 간단한 코드를 사용할 때 사용됩니다.
Codable 모델 등을 개발할 때 사용됩니다.
오늘 알아본 Class와 Struct는 iOS 면접 단골 질문입니다. 꼭 공부해야합니다!
간단한 질문 같지만, 생각보다 답하기 어려운 질문입니다.
궁금하신 점 있으면 댓글 남겨주세요!!
'Swift' 카테고리의 다른 글
| [Swift] 함수와 메소드 (0) | 2021.11.01 |
|---|---|
| [Swift] Nil 병합 연산자 "??" (0) | 2021.10.26 |