struct vs. class 차이점과 공통점
✅ 공통점
✅ 차이점
구조체
struct Movie {
// stored property
var name: String
var director: String
// computed property
// 저장된 값이 아닌 계산된 값을 반환함
var description: String {
return "\(name) is \(director)'s best movie ever"
}
}
var movie = Movie(name: "인셉션", director: "놀란")
print(movie.description)
struct Task {
var name: String
var progress: Int {
didSet {
print("Current Progress : \(progress) %")
}
}
}
var task = Task(name: "Very Important Task", progress: 0)
task.progress = 30 // Current Progress : 30 %
struct
인스턴스 생성시 let
을 이용해서 상수로 생성하면, property 변경 할수 없음struct
인스턴스 생성시 var
을 이용해서 변수로 생성하면, property 변경 할수도 있고 없을수도 있음var
로 선언된 경우let
로 선언된 경우struct
에서 method
가 stored property
값을 변경하는 경우, mutating
키워드를 메소드 앞에 붙여주어야함struct Student {
let name: String
var major: String
var knowledge: Double
func didFinalTest() -> Int {
let howMuchIdontKnow = (1 - knowledge) * 100
let score = 100 - Int(howMuchIdontKnow)
return score
}
mutating func didStudy() {
if knowledge >= 1 {
knowledge = 1
} else {
knowledge += 0.1
}
}
}
var student = Student(name: "Jason", major: "CS", knowledge: 0.5)
let score1 = student.didFinalTest()
student.didStudy()
클래스
class Dog {
var name: String
var breed: String
init(name: String, breed: String) {
self.name = name
self.breed = breed
}
}
let milk = Dog(name: "milk", breed: "Collie")
milk.name // milk
milk.breed // Collie
final
키워드를 이용해서 클래스 선언하면, 더 이상 상속 가능하지 않음struct
와 class
의 차이중 하나가 instance 복사할때임struct
와 같은 value type
은 복사하면, 새로운 객체를 만듬class
와 같은 reference type
은 복사하면, 새로운 객체를 만들지 않음 (같은 객체를 포인팅하고 있음)class
는 struct
와 다르게 reference type
이여서 상수로 선언하더라도, 프로퍼티가 var
로 선언해 놓았으면 변경 가능함mutating
키워드를 쓸 필요 없음let
으로 선언해 놓으면 됨