인스턴스 메서드(Instance Method)
- 인스턴스 메서드는 특정 인스턴스에 속한 함수이다
- 인스턴스의 속성을 읽거나 수정하거나, 인스턴스와 관련된 기능을 제공하는 메서드이다
- 클래스, 구조체, 열거형에서 정의할 수 있다
클래스의 인스턴스 메서드
class Vehicle {
var type: String
var speed: Double
init(type: String, speed: Double) {
self.type = type
self.speed = speed
}
func start() {
print("\(type)가 출발합니다.")
}
func stop() {
print("\(type)가 멈췄습니다.")
}
func accelerate(by amount: Double) {
speed += amount
print("\(type)의 속도가 \(speed)km/h로 증가했습니다.")
}
func changeType(to newType: String) {
self.type = newType
}
}
let myCar = Vehicle(type: "자동차", speed: 60)
myCar.start()
myCar.accelerate(by: 20)
myCar.stop()
myCar.changeType(to: "스포츠카")
myCar.start()
클래스의 인스턴스 메서드 특징
1. self 키워드 사용
- 인스턴스의 속성이나 메서드를 지칭할 때 사용
- 메서드 내에서 속성 이름과 매개변수 이름이 겹칠 때 명확하게 구분하기 위해 사용
2. 인스턴스의 속성을 수정 가능
- 클래스는 참조 타입(Reference Type) 이므로 메서드 내에서 속성을 수정할 수 있다
구조체의 인스턴스 메서드
struct Account {
var owner: String
var balance: Double
init(owner: String, balance: Double) {
self.owner = owner
self.balance = balance
}
func displayBalance() {
print("\(owner)의 계좌 잔액은 \(balance)원입니다.")
}
mutating func deposit(amount: Double) {
balance += amount
print("\(amount)원이 입금되었습니다. 현재 잔액: \(balance)원")
}
mutating func withdraw(amount: Double) {
if amount > balance {
print("잔액이 부족합니다.")
} else {
balance -= amount
print("\(amount)원이 출금되었습니다. 현재 잔액: \(balance)원")
}
}
}
var myAccount = Account(owner: "Royce", balance: 5000)
myAccount.displayBalance()
myAccount.deposit(amount: 2000)
myAccount.withdraw(amount: 1000)
구조체의 인스턴스 메서드 특징
1. mutating 키워드 사용
- 구조체는 값 타입(Value Type) 이므로, 인스턴스 메서드가 속성을 수정하려면
mutating 키워드를 사용해야 한다
mutating을 사용하지 않으면 메서드 내에서 속성을 수정할 수 없다
2. 값 타입의 특징
- 메서드 내에서 값이 수정되면 복사본이 수정되는 것이다
- mutating 메서드가 속성을 수정하면, 복사본이 아닌 원래의 값이 수정된다
클래스와 구조체의 인스턴스 메서드 비교
클래스(class) | 구조체(struct) |
|---|
| 메서드에서 속성 수정 가능 | mutating 키워드 필요 |
| 참조 타입(Reference Type) | 값 타입(Value Type) |
| 인스턴스 메서드에서 상속 가능 | 상속 불가 |
self 키워드를 사용하여 속성 수정 가능 | mutating 키워드를 사용하여 속성 수정 가능 |
메서드 오버로딩(Method Overloading)
- 동일한 이름의 메서드를 여러 개 정의하는 것을 의미한다.
- 매개변수의 개수, 타입, 이름이 다르면 같은 이름을 사용해도 된다
struct Calculator {
func add(a: Int, b: Int) -> Int {
return a + b
}
func add(a: Double, b: Double) -> Double {
return a + b
}
func add(a: Int, b: Int, c: Int) -> Int {
return a + b + c
}
}
let calculator = Calculator()
print(calculator.add(a: 2, b: 3))
print(calculator.add(a: 2.5, b: 3.5))
print(calculator.add(a: 1, b: 2, c: 3))
요약
- 인스턴스 메서드: 특정 인스턴스에 속한 함수로, 해당 인스턴스의 속성이나 기능을 다루기 위해 사용된다
- 클래스의 인스턴스 메서드: 인스턴스의 속성을 자유롭게 수정할 수 있다 (
self 키워드 사용)
- 구조체의 인스턴스 메서드: 속성을 수정하려면
mutating 키워드가 필요하다
- 메서드 오버로딩: 동일한 이름의 메서드를 매개변수의 종류, 개수로 구분하여 여러 번 정의할 수 있다