TIL: 인스턴스 메서드(Instance Method)

Royce·2025년 3월 22일

Swift 문법

목록 보기
29/63

인스턴스 메서드(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))          // 출력: 5
print(calculator.add(a: 2.5, b: 3.5))      // 출력: 6.0
print(calculator.add(a: 1, b: 2, c: 3))    // 출력: 6

요약

  • 인스턴스 메서드: 특정 인스턴스에 속한 함수로, 해당 인스턴스의 속성이나 기능을 다루기 위해 사용된다
  • 클래스의 인스턴스 메서드: 인스턴스의 속성을 자유롭게 수정할 수 있다 (self 키워드 사용)
  • 구조체의 인스턴스 메서드: 속성을 수정하려면 mutating 키워드가 필요하다
  • 메서드 오버로딩: 동일한 이름의 메서드를 매개변수의 종류, 개수로 구분하여 여러 번 정의할 수 있다
profile
iOS 개발자 지망생

0개의 댓글