Post

인스턴스 메소드 vs 타입 메서드

인스턴스 메소드 vs 타입 메서드

인스턴스 메서드 vs 타입 메서드 – Swift에서 메서드의 두 얼굴

Swift에서 메서드는 크게 두 가지로 나뉜다: **인스턴스 메서드(instance method)**와 타입 메서드(type method). 이 둘은 선언 위치는 같지만, 누구에게 속하느냐어떻게 호출하느냐에서 명확한 차이가 있다.


인스턴스 메서드란?

인스턴스 메서드는 클래스, 구조체, 열거형의 인스턴스(객체)에 속한 메서드다. 인스턴스를 생성해야 사용할 수 있으며, 해당 인스턴스의 속성에 접근하거나 상태를 변경할 수 있다.

✅ 특징

  • self를 통해 인스턴스 속성 및 메서드 접근 가능
  • 메서드 안에서 인스턴스의 상태를 읽거나 수정할 수 있음
  • 호출하려면 반드시 인스턴스가 있어야 함

✅ 예시

1
2
3
4
5
6
7
8
9
10
struct Counter {
    var count = 0

    mutating func increment() {
        count += 1
    }
}

var counter = Counter()
counter.increment()

타입 메서드란?

타입 메서드는 클래스, 구조체, 열거형의 타입 그 자체에 속한 메서드다. 즉, 인스턴스를 만들지 않아도 타입 이름으로 직접 호출할 수 있다.

✅ 선언 방법

  • static func → 구조체/열거형에서 사용
  • class func → 클래스에서 사용 (오버라이딩 가능)

✅ 예시

1
2
3
4
5
6
7
struct Math {
    static func square(_ x: Int) -> Int {
        return x * x
    }
}

let result = Math.square(4) // 16

클래스에서 오버라이딩하려면 class func 사용:

1
2
3
4
5
6
7
8
9
10
11
class Animal {
    class func typeName() -> String {
        return "Animal"
    }
}

class Dog: Animal {
    override class func typeName() -> String {
        return "Dog"
    }
}

정리 – 차이점 비교

구분인스턴스 메서드타입 메서드
소속인스턴스타입 그 자체
호출 방식someInstance.method()SomeType.method()
인스턴스 상태 접근가능불가능 (self는 타입 자체를 의미)
선언 키워드없음 (기본)static, class
오버라이딩불가class 키워드 사용 시 가능

언제 어떤 걸 써야 하나?

상황메서드 종류
인스턴스의 속성 값을 변경하거나 접근할 때인스턴스 메서드
전역적인 계산, 유틸리티 기능이 필요할 때타입 메서드
타입 자체의 정보를 리턴하고 싶을 때타입 메서드
생성 없이 공용 기능을 호출하고 싶을 때타입 메서드

마무리

Swift에서 메서드를 설계할 때 “이 기능이 인스턴스에 의존적인가?”를 먼저 판단하면 된다.

  • 의존적이면 인스턴스 메서드
  • 의존하지 않으면 타입 메서드

역할을 명확히 구분하면 코드의 구조와 책임도 더 깔끔해진다.

This post is licensed under CC BY 4.0 by the author.