Swift에서 class와 struct는 객체지향 프로그래밍에서 중요한 역할을 하는 두 가지 데이터 타입입니다. 둘 다 여러 속성(properties)과 메서드(methods)를 포함할 수 있지만, 메모리 관리와 사용 방식에서 차이가 있습니다. 아래에 class와 struct의 사용 예시를 각각 보여드리겠습니다.
'struct'
struct Person {
var name: String
var age: Int
// 메서드 추가
func greet() {
print("Hello, my name is \(name) and I am \(age) years old.")
}
// 속성 값 수정 메서드
mutating func haveBirthday() {
age += 1
}
}
// 구조체 인스턴스 생성
var person1 = Person(name: "John", age: 25)
person1.greet() // "Hello, my name is John and I am 25 years old."
// 속성 값 수정
person1.haveBirthday()
print(person1.age) // 26
// 값 타입 특성: person2는 person1의 복사본
var person2 = person1
person2.name = "Jane"
person2.age = 30
print(person1.name) // "John"
print(person2.name) // "Jane"
'struct'는 값 타입(value type)이기 때문에 person1과 person2는 서로 독립적으로 존재합니다. 즉, person2의 값을 수정해도 person1에 영향을 주지 않습니다.
'class' 사용 예시
class Car {
var model: String
var year: Int
// 클래스의 생성자
init(model: String, year: Int) {
self.model = model
self.year = year
}
// 메서드 추가
func displayDetails() {
print("Car model: \(model), year: \(year)")
}
}
// 클래스 인스턴스 생성
let car1 = Car(model: "Tesla Model S", year: 2023)
car1.displayDetails() // "Car model: Tesla Model S, year: 2023"
// 참조 타입 특성: car2는 car1의 참조
let car2 = car1
car2.model = "Tesla Model 3"
car2.year = 2024
print(car1.model) // "Tesla Model 3"
print(car2.model) // "Tesla Model 3"
'class'는 참조 타입(reference type)이므로 car1과 car2는 동일한 인스턴스를 참조합니다. 따라서 car2의 값을 수정하면 car1에도 동일하게 반영됩니다.
'struct'와 'class'의 주요 차이점
값 타입 vs 참조 타입: struct는 값 타입이고, class는 참조 타입입니다. 값 타입은 복사되어 독립적인 인스턴스가 생성되며, 참조 타입은 동일한 인스턴스를 참조합니다.
상속: class는 상속을 지원하지만, struct는 상속을 지원하지 않습니다.
디이니셜라이저: class는 소멸자(deinitializer)를 지원하지만, struct는 지원하지 않습니다.
이러한 차이점을 바탕으로, 필요한 기능에 맞게 'struct' 또는 'class' 를 선택하여 사용할 수 있습니다.
'programmer '프로그래머'' 카테고리의 다른 글
UILabel 속성 (0) | 2024.09.04 |
---|---|
UITextField 속성 (0) | 2024.09.03 |
옵셔널 사용한 예시 (0) | 2024.08.30 |
Array 를 사용하는 예시 코드 (0) | 2024.08.29 |
'if-else' 문에 대한 예시 코드 (0) | 2024.08.28 |