Menu
Menu
Posts List
  1. Func:
    1. 1. func – 인스턴스 메서드
    2. 2. static func – 타입 메서드 (재정의 불가)
    3. 3. class func – 타입 메서드 (오버라이딩 가능)
    4. 비교표
    5. 📝 실무 팁

Func, Static func, Class func

Func:

func, static func, class func 차이점 정리

Swift에서 메서드를 정의할 때 사용하는 func, static func, class func메서드의 소속과 오버라이딩 여부에 따라 다르게 동작한다.


1. func – 인스턴스 메서드

  • 클래스/구조체/열거형의 인스턴스에 속하는 함수
  • 인스턴스를 생성한 후에만 호출 가능
    1
    2
    3
    4
    5
    6
    7
    8
    struct Dog {
    func bark() {
    print("멍멍")
    }
    }

    let myDog = Dog()
    myDog.bark() // ✅

2. static func – 타입 메서드 (재정의 불가)

  • 타입 자체에 속하는 함수
  • 인스턴스를 만들지 않고 호출 가능
  • 클래스/구조체/열거형 모두 사용 가능
  • 오버라이딩(override) 불가
    1
    2
    3
    4
    5
    6
    7
    struct 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
    13
    class 강아지 {
    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

이 구분을 정확히 이해하고 타입 설계와 코드 구조에 더 신경쓰자!!