Method
- 클래스, 구조체, 열거형 속에 포함되어 있는 함수
- func으로 선언한 함수가 클래스, 구조체, 열거형 속에 포함되어 있다면 → 메소드
- Swift에선 구조체와 열거형에 메소드를 정의할 수 있다는 사실은
Objective-C와의 가장 큰 차이점이다.
Objective-C |
Swift |
메소드만 정의할 수 있는 유일한 타입 |
클래스,구조체, 열거형을 정의를 선택할 수 있고, 생성된 타입의 메소드를 유연하게 정의 |
class Doughnut {
func asmrSound() {
print("Nam-Nam")
}
}
asmrSound는 함수가 아니라 메소드라고 표현함
인스턴스 메서드 (Instance Methods)
- 특정 타입의 인스턴스에 속한 함수를 뜻합니다.
- 인스턴스 내부의 프로퍼티 값을 변경하거나 특정 연간 결과를 반화하는 등 인스턴스와 관련된 기능을 실행합니다.
- 보통 func로 시작하는 메서드는 인스턴스 메서드입니다.
class Doughnut {
func asmrSound() {
print("Nam-Nam")
}
}
let doughnut: Doughnut = .init()
doughnut.asmrSound()
doughnut 인스턴스를 먼저 생성하고 그 이후 생성된 인스턴스를 호출함
호출 방법
- 호출은 이렇게 인스턴스를 생성한 다음 .을 이용하여 호출한다.
( 저장 프로퍼티때의 호출이랑 같은 방식! )
- 인스턴스 메서드는 인스턴스를 생성하지 않으면 해당 메서드에 접근하여 값을 호출하는 것이 불가능하다.
class Music {
func kPop() {
print("awesome")
}
}
let listen : Music = .init()
listen.kPop()
class Counter {
var count = 0
func increment() {
count += 1
}
func increment(by amount: Int) {
count += amount
}
func reset() {
count = 0
}
}
let counter = Counter()
// the initial counter value is 0
counter.increment()
// the counter's value is now 1
counter.increment(by: 5)
// the counter's value is now 6
counter.reset()
// the counter's value is now 0
class LevelClass {
//현재 레벨을 저장하는 저장 프로퍼티
var level: Int = 0 {
//프로퍼티 값이 변경되면 호출하는 프로퍼티 감시자
didSet {
print("Level \\ (level)")
}
}
//레벨이 올랐을 때 호출할 메서드
func levelup() {
print("Level Up!")
level += 1
}
//레벨이 감소했을 때 호출할 메서드
func levelDown () {
print("Level Down")
level -= 1
if level < 0 {
reset ()
}
}
//특정 레벨로 이동할 때 호출할 메서드
func jumpLevel (to: Int) {
print("Jump to \\ (to)")
level = to
}
//레벨을 초기화할 때 호출할 메서드
func reset() {
print("Reset!")
level = 0
}
//호출방법 : 인스턴스 생성 후 호출
var levelClassInstance: LevelClass = LevelClass () // Level Up!
levelClassInstance.levelUp() // Level Up!
// Level 1
levelClassInstance.levelDown() // Level Down
// Level 0
levelClassInstance. levelDown () // Level Down
// Level -1
// Reset!
// Level o
levelClassInstance.jumpLevel(to: 3) // Jump to 3
// Level 3