초기화 메서드
Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 4번째.
이니셜라이저는 init으로 작성하며, 인스턴스가 생성될 때 실행되어 프로퍼티에 초기값을 할당합니다. 이니셜라이저의 매개변수는 타입 호출의 인수가 됩니다:
class Book {
var title: String
var pages: Int
init(title: String, pages: Int) {
self.title = title
self.pages = pages
}
}
let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)출력:
Dune
412인스턴스를 사용하려면 모든 프로퍼티에 값이 있어야 합니다. 기본값이 없는 프로퍼티는 init에서 설정해야 하며, 그렇지 않으면 클래스가 컴파일되지 않습니다. let으로 선언된 프로퍼티는 init에서 한 번 설정한 후에는 다시 변경할 수 없습니다:
class Book {
let isbn: String // init에서 한 번만 설정
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}init의 매개변수에는 기본값을 지정할 수 있으므로, 호출자는 다른 값만 전달하면 됩니다:
class Timer {
var seconds: Int
var label: String
init(seconds: Int, label: String = "timer") {
self.seconds = seconds
self.label = label
}
}
let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")출력:
egg 300
timer 30클래스에는 둘 이상의 이니셜라이저가 있을 수 있으며, 각각 매개변수가 다릅니다. convenience init은 일부 값을 채우고 self.init(...)을 사용해 기본 이니셜라이저를 호출합니다:
class Temperature {
var celsius: Double
init(celsius: Double) {
self.celsius = celsius
}
convenience init(fahrenheit: Double) {
self.init(celsius: (fahrenheit - 32) * 5 / 9)
}
}
print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)출력:
20.0
100.0챌린지
쉬움Account 클래스의 초기화자를 작성하세요. 초기화자는 owner와 기본값이 0인 선택적 balance를 받아 두 값을 저장해야 합니다. 그런 다음 summary()를 완성하세요. 이 메서드는 Ada has 150을 반환합니다.
제공된 코드는 소유자를 읽고, 두 번째 줄이 있으면 시작 잔액도 읽습니다. 잔액 유무에 따라 계정을 생성하고 summary()를 출력합니다.
코드는 Account.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.
직접 해보기
// 제공된 입력/출력 코드: 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
let account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드