인스턴스 메소드 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.