Menu
Coddy logo textTech

초기화 메서드

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
challenge icon

챌린지

쉬움

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())
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: Swift 플레이그라운드