Menu
Coddy logo textTech

메서드와 self

Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 3번째.

메서드 내부에서 self는 메서드가 호출된 인스턴스입니다. self.count와 count는 같은 프로퍼티를 의미하므로, 일반적으로 self는 생략합니다:

class Counter {
    var count = 0
    func increment() {
        self.count += 1
    }
}

let c = Counter()
c.increment()
print(c.count)

출력:

1

매개변수의 이름이 속성의 이름과 같을 때 self가 필요합니다. 이때 이름만 사용하면 매개변수를 의미하고, self.name은 속성을 의미합니다:

class Player {
    var name = "unknown"
    func rename(name: String) {
        self.name = name
    }
}

let p = Player()
p.rename(name: "Ada")
print(p.name)

출력:

Ada

메서드는 동일한 인스턴스의 다른 메서드를 호출할 수 있으므로, 각 메서드를 작게 유지할 수 있습니다:

class Cart {
    var total = 0
    func add(_ price: Int) {
        total += price
    }
    func addTwice(_ price: Int) {
        add(price)
        add(price)
    }
}

let cart = Cart()
cart.addTwice(5)
print(cart.total)

출력:

10

메서드는 속성에서 계산된 값을 반환할 수도 있습니다. 여기서 isEmpty()는 인스턴스를 변경하지 않고 인스턴스에 대한 질문에 답합니다:

class Cart {
    var items: [String] = []
    func add(_ item: String) {
        items.append(item)
    }
    func isEmpty() -> Bool {
        items.count == 0
    }
}

let cart = Cart()
print(cart.isEmpty())
cart.add("tea")
print(cart.isEmpty())

출력:

true
false
challenge icon

챌린지

쉬움

Thermostat 클래스를 완성하세요. setTarget(target:)은 매개변수를 속성 target에 저장하고(self 사용), warmer()는 target을 1만큼 증가시키며, display()는 target: 21을 반환합니다.

제공된 코드는 시작 target과 명령 목록(warmer 또는 set <n>)을 읽고, 이를 적용한 다음 마지막에 display()를 출력합니다.

코드는 Thermostat.swift에 작성하세요. main.swift에는 제공된 입력/출력 코드가 있으며 수정할 수 없습니다.

직접 해보기

// 제공된 입력/출력 코드: 있는 그대로 유지하세요
var input: [String] = []
while let line = readLine() { input.append(line) }
let t = Thermostat()
t.setTarget(target: Int(input[0])!)
for cmd in input.dropFirst() {
    if cmd == "warmer" { t.warmer() } else { t.setTarget(target: Int(cmd.dropFirst(4))!) }
}
print(t.display())
quiz icon실력 점검

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

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

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