Func:
func
, static func
, class func
차이점 정리
Swift에서 메서드를 정의할 때 사용하는 func
, static func
, class func
는 메서드의 소속과 오버라이딩 여부에 따라 다르게 동작한다.
1. func
– 인스턴스 메서드
- 클래스/구조체/열거형의 인스턴스에 속하는 함수
- 인스턴스를 생성한 후에만 호출 가능
1
2
3
4
5
6
7
8struct Dog {
func bark() {
print("멍멍")
}
}
let myDog = Dog()
myDog.bark() // ✅
2. static func
– 타입 메서드 (재정의 불가)
- 타입 자체에 속하는 함수
- 인스턴스를 만들지 않고 호출 가능
- 클래스/구조체/열거형 모두 사용 가능
- 오버라이딩(override) 불가
1
2
3
4
5
6
7struct Math {
static func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
}
let sum = Math.add(3, 5) // ✅ 8
3. class func
– 타입 메서드 (오버라이딩 가능)
class
에서만 사용 가능 (struct/enum ❌)static
과 유사하지만, 서브클래스에서 오버라이드 가능- 동적 디스패치(Dynamic Dispatch) 사용
1
2
3
4
5
6
7
8
9
10
11
12
13class 강아지 {
class func sound() -> String {
return "왈왈"
}
}
class 찐빵: 강아지 {
override class func sound() -> String {
return "멍멍"
}
}
print(찐빵.sound()) // "멍멍"
비교표
키워드 | 호출 대상 | 오버라이딩 가능 | 사용 가능 타입 | 용도 요약 |
---|---|---|---|---|
func |
인스턴스 | ✅ 가능 | class, struct, enum | 인스턴스 메서드 |
static func |
타입 | ❌ 불가 | class, struct, enum | 타입 메서드 (고정) |
class func |
타입 | ✅ 가능 | class 전용 | 오버라이딩 가능한 타입 메서드 |
📝 실무 팁
- 구조체나 열거형에서는 항상
static func
만 사용 가능 - 클래스에서 상속을 고려하면
class func
, 아니라면static func
이 더 명시적이고 최적화됨 - 정적 유틸 함수, 공통 로직 →
static
- 다형성, 확장 가능성 있는 로직 →
class func
이 구분을 정확히 이해하고 타입 설계와 코드 구조에 더 신경쓰자!!