Jupyo's Daily Story
클래스 (Class) 본문
728x90
반응형
클래스(Class)는 참조 타입을 가지는 객체 지향 프로그래밍의 핵심 구성 요소입니다. 클래스는 데이터를 저장하고, 기능을 제공하며, 상속을 통해 다른 클래스와 관계를 형성할 수 있습니다. Swift에서 클래스는 복잡한 데이터 모델을 정의하거나 참조 타입이 필요한 상황에서 주로 사용됩니다.
클래스의 주요 특징
- 참조 타입(Reference Type): 클래스는 참조 타입입니다. 즉, 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때 복사되지 않고 참조가 전달됩니다. 따라서 여러 변수가 동일한 인스턴스를 가리킬 수 있으며, 한 변수에서 인스턴스를 수정하면 다른 변수에서도 수정된 결과를 확인할 수 있습니다.
- 상속 가능: 클래스는 상속이 가능합니다. 상속을 통해 기존 클래스의 기능을 재사용하거나 확장할 수 있습니다. 이는 구조체와 가장 큰 차이점 중 하나입니다.
- 이니셜라이저: 클래스는 이니셜라이저를 통해 속성을 초기화할 수 있으며, 사용자 정의 이니셜라이저를 작성할 수 있습니다. Swift에서는 기본적으로 상속되지 않는 경우 이니셜라이저가 자동으로 제공되지만, 상속 관계가 있는 경우 상위 클래스의 이니셜라이저를 호출해야 합니다.
- 참조 카운팅(ARC): Swift는 자동 참조 카운팅(Automatic Reference Counting, ARC)을 사용해 클래스 인스턴스의 메모리 관리를 자동으로 처리합니다. 객체가 더 이상 참조되지 않을 때 메모리가 자동으로 해제됩니다.
- 데이브리핑: 클래스는 deinit이라는 소멸자를 가지고 있어 인스턴스가 해제될 때 정리 작업을 수행할 수 있습니다.
클래스 선언 및 사용
class Animal {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func makeSound() {
print("\(name) makes a sound.")
}
deinit {
print("\(name) is being deinitialized.")
}
}
let myDog = Animal(name: "Buddy", age: 3)
myDog.makeSound() // "Buddy makes a sound."
클래스의 주요 개념
참조 타입(Reference Type)
- 클래스 인스턴스는 참조 타입이므로, 변수나 상수에 할당되거나 함수에 전달될 때 복사되지 않고 참조가 전달됩니다.
let animal1 = Animal(name: "Dog", age: 5)
let animal2 = animal1 // animal과 같은 인스턴스를 참조
animal2.name = "Cat"
print(animal1.name) // "Cat", 동일한 인스턴스를 참조하므로 함께 변경됨
상속(Inheritance)
- 클래스는 다른 클래스로부터 상속받을 수 있습니다. 이를 통해 기존 클래스의 기능을 재사용하거나 확장할 수 있습니다.
class Dog: Animal {
func bark() {
print("\(name) barks!")
}
}
let myPet = Dog(name: "Buddy", age: 3)
myPet.bark() // "Buddy barks!"
myPet.makeSound() // 상위 클래스의 메서드 사용 가능, "Buddy makes a sound."
이니셜라이저(Initializer)
- 클래스는 초기화 메서드를 사용해 속성을 초기화합니다. 상속된 클래스는 상위 클래스의 이니셜라이저를 호출해야 할 수 있습니다.
class bird: Animal {
var canFly: Bool
init(name: String, age: Int, canFly: Bool) {
self.canFly = canFly
super.init(name: name, age: age) // 상위 클래스의 초기화 호출
}
}
deinit(소멸자)
- 클래스 인스턴스가 메모리에서 해제될 때 호출되는 소멸자입니다. 리소스를 정리하는 작업을 수행할 수 있습니다.
deinit {
print("\(name) is being deinitialized.")
}
클래스와 구조체의 차이점
특징 | 클래스(Class) | 구조체(Struct) |
타입 | 참조 타입(Reference Type) | 값 타입(Value Type) |
상속 | 가능 | 불가능 |
메모리 관리 | 자동 참조 카운팅(ARC) | 메모리 관리 불필요 |
이니셜라이저 | 사용자 정의 필요 | 멤버와이즈 이니셜라이저 제공 |
소멸자 | deinit을 사용해 소멸 시 리소스 정리 | 소멸자 없음 |
클래스의 활용
- 상속이 필요한 경우: 상속을 통해 공통 기능을 확장하거나 재사용해야 하는 경우, 클래스가 적합합니다.
- 참조가 필요한 경우: 여러 변수가 동일한 객체를 참조하고, 변경 사항이 여러 곳에서 반영되어야 하는 상황에서는 클래스가 유리합니다.
클래스는 주로 복잡한 데이터 모델링, 네트워크 작업, 객체 간의 관계 형성 및 관리를 할 때 많이 사용됩니다.
반응형
'Swift' 카테고리의 다른 글
PictureInPicture (0) | 2020.10.21 |
---|---|
Array vs NSArray, NSMutableArray (0) | 2020.01.22 |
iOS 13버전 SNS Login 대응 방법 (0) | 2020.01.10 |
구조체 (Struct) (0) | 2019.12.30 |
주석 작성법 (0) | 2019.12.29 |