어흥
[Swift] Structure, Class 본문
728x90
반응형
1. 차이
Structure | Class |
Value type | Reference type |
Copy | Share |
Stack에 저장 | Heap에 저장 |
Fast | Slow |
1) 각각 사용해야 할 때
[Struct를 써야 할 때]
1. 두 Object를 같다, 다르다로 비교해야 하는 경우
2. Copy된 각 객체들이 독립적인 상태를 가져야 하는 경우
3. 코드에서 오브젝트의 데이터를 여러 쓰레드 걸쳐 사용할 경우(여러 쓰레드가 접근할 경우)
[Class를 써야 할 때]
1. 두 Object의 인스턴스 자체가 같음을 확인해야 할 때
2. 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우
예시 코드)
class PersonClass{
var name: String
var age: Int
init(name: String, age: Int){
self.name = name
self.age = age
}
}
struct PersonStruct{
var name: String
var age: Int
init(name: String, age: Int){
self.name = name
self.age = age
}
}
let pClass1 = PersonClass(name: "Jack", age: 25)
let pClass2 = pClass1
pClass2.name = "Hey"
pClass1.name //Hey
pClass2.name //Hey
var pStruct1 = PersonStruct(name: "Jakop", age: 30)
var pStruct2 = pStruct1
pStruct2.name = "Jessie"
pStruct1.name //Jakop
pStruct2.name //Jessie
※주의
- Class와 Structure의 store property Age를 let으로 설정하고 바꾸려고 시도했을 때
class PersonClass{
var name: String
let age: Int
init(name: String, age: Int){
self.name = name
self.age = age
}
}
struct PersonStruct{
var name: String
let age: Int
init(name: String, age: Int){
self.name = name
self.age = age
}
}
let pClass = PersonClass(name: "Jack", age: 25)
pClass.age = 20 //No Error
let pStruct = PersonStruct(name: "Jakop", age: 30)
pStruct.age = 20 //Error
결과: Structure는 Value type이라서 Error발생, Class는 Reference type이라서 에러 발생x
2. Structure
1) 구성: Object의 형태로, Data + Method로 이루어져 있다.
2) 코드
//1. 강의 이름, 강사 이름, 학생수를 가지는 Struct 만들기(Lecture)
//2. 강의 어레이어와 강사이름을 받아서, 해당 강사의 강의 이름을 출력하는 함수 만들기
//3. 강의 3개 만들고 강사 이름으로 강의 찾기
struct Lecture{
var lectureName: String
var teacher: String
var studentNum: Int
init(lectureName: String, teacher: String, studentNum: Int){
self.lectureName = lectureName
self.teacher = teacher
self.studentNum = studentNum
}
}
func printLectureName(lectures: [Lecture], name: String){
for lec in lectures{
let tname = lec.teacher
let lname = lec.lectureName
if tname == name {
print(lname)
}
}
}
let l1 = Lecture(lectureName: "PE",teacher: "Ashe",studentNum:20)
let l2 = Lecture(lectureName: "Science",teacher: "Josh",studentNum:15)
let l3 = Lecture(lectureName: "Math",teacher: "Amily",studentNum:25)
let lectures = [l1,l2,l3]
printLectureName(lectures: lectures, name: "Amily") //Math
728x90
반응형
'iOS' 카테고리의 다른 글
[Swift] Property, Method (0) | 2020.09.01 |
---|---|
[Swift] Protocol (0) | 2020.08.28 |
[Swift] Closure (0) | 2020.08.26 |
[Swift] Dictionary, Set (0) | 2020.08.25 |
[Swift] 배열 (0) | 2020.08.25 |
Comments