class
- 연관된 상태는 변수, 상수에 저장하고, 행동은 함수를 정의한 후 그룹화하여 데이터타입으로 사용할 수 있음.
- 프로퍼티와 메소드로 구성되어 있음.
- 프로퍼티 : struct, class 안에 있는 변수, 상수
- 메소드 : struct, class 안에 있는 함수
- class의 인스턴스를 생성하여 사용할 수 있음.
- class 안에서 사용되는 변수와 상수인 프로퍼티에는 default 값을 정해줄 수 있음.
- class의 인스턴스를 생성할 때 반드시 초기화를 해줘야 함.
- init 초기화를 제공해야 함.
- 모든 프로퍼티에 default값을 제공한다면 init 초기화를 생략할 수 있음.
- 모든 프로퍼티가 Optional인 경우 init 초기화를 생략할 수 있음.
- 초기화를 도와주는 convenience initializer를 제공함.
- class를 사용해서 만들어진 인스턴스는 Reference Type임.
- 인스턴스를 let으로 만들어도 프로퍼티 변경이 됨.
- 함수에 class의 인스턴스를 전달하고 프로퍼티를 변경하면 원본도 변경이 됨.
- 상속 가능
- 하위 클래스가 상위 클래스의 속성(프로퍼티)과 행동(메소드)를 물려받아서 사용할 수 있음.
class 구현방법, 초기화방법, 사용방법
1. 기본 정의 방법
// 기본 정의(구현) 방법
class 클래스이름 {
// 파라미터 선언
// 메소드 선언
// 파라미터가 있다면 init을 사용하여 초기화
}
// 사용방법 (인스턴스로 만드는 방법)
let 인스턴스이름 = 클래스이름()
// () 안에 init에 들어가는 파라미터를 채워주면 됨.
2. init 방법(초기화 방법)
- 인스턴스를 생성할 때 모든 프로퍼티를 초기화해야 하며, 이를 위해 init 키워드를 사용함.
- 모든 프로퍼티의 값을 할당해줘야 함.
- 예외 : 값이 없을 수 있는 옵셔널타입, 초기값을 준 프로퍼티
- init을 여러개 만들 수 있음.
- convenience init 기능 제공
지정초기화
// 일반적인 init
class Person {
var name: String // 값을 저장하는 저장 프로퍼티
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person = Person(name: "Brody", age: 25)
기본값초기화
- 프로퍼티에 기본값을 넣으면 초기화를 진행하지 않아도 됨.
class Person {
var name: String = "이름없음"
var age: Int = 0
}
let person = Person()
// 혹은 파라미터를 받지 않는 init에서 모든 프로퍼티 값을 정해줄 수 있습니다.
class Person {
var name: String
var age: Int
init() {
self.name = "이름없음"
self.age = 15
}
}
여러개의 Init 사용
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
init(name: String) {
self.name = name
self.age = 0
}
init() {
self.name = "이름없음"
self.age = 15
}
}
// 인스턴스를 생성하는 방식, 초기화 방식에 따라 값이 다름
let person1 = Person(name: "Aiden", age: 34)
print(["\(person1.name)", "\(person1.age)"].joined(separator: ", "))
// Aiden, 34
let person2 = Person(name: "Aiden")
print(person2.name)
// Aiden
let person3 = Person()
print(person3.name, person3.age)
// 이름없음 15
let person4: Person = Person()
print("\(person4.name), \(person4.age)")
// 이름없음, 15
conveniece init : 보조 초기화
- 클래스에서만 사용할 수 있는 기능.
- self.init을 사용하여 초기화를 도와줌.
// 컨비니언스 이니셜라이저(convenience initializer) 사용해보기
// 파라미터에 값을 할당하지 않고 컨비니언스 이니셜라이즈를 사용해도 비슷한 효과를 낼 수 있습니다.
class Person {
var name: String
var age: Int // 기본값을 주지 않았어요!
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) { // convenience init에서 name만 받은 후 아래 init에서 기본값을 정해줄 수 있습니다.
self.init(name: name, age: 0)
}
}
let person = Person(name: "Aiden") // name 프로퍼티만 전달해줌.
print(person.name)
print(person.age) // 0 -> convenience init의 age 값을 전달받음.
deinit : 소멸자
- class 에서만 사용 가능함.
- 사용이 종료된 인스턴스가 메모리에서 해제될 때 자동 호출됨.
- 직접 호출은 할 수 없음.
- 예를 들어 파일을 열고 데이터를 작성하는 클래스를 생성하면 클래스 인스턴스를 할당 해제하기 전에 파일을 닫아야 함.
'문법' 카테고리의 다른 글
| [iOS] 2025.03.18 문법(프로퍼티) (0) | 2025.03.18 |
|---|---|
| [iOS] 2025.03.18 문법(struct) (0) | 2025.03.18 |
| [iOS] 2025.03.18 문법(인스턴스) (0) | 2025.03.18 |
| [iOS] 2025.03.13 문법(열거형) (0) | 2025.03.13 |
| [iOS] 2025.03.12 문법(반복문, 함수, 데이터타입, 클로저) (0) | 2025.03.12 |