itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • 점주
  • POSTECH
  • 어플
  • nosql
  • binding
  • CoreData
  • 세그멘테이션
  • 독립서점
  • ios
  • SWIFT
  • AppleDevloperAcademy
  • CS
  • crud
  • SwiftUI
  • 생활코딩
  • 연결리스트
  • 킨디
  • mongodb
  • 개발자

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

[iOS - Swift] static func vs func
iOS/Swift

[iOS - Swift] static func vs func

2023. 3. 6. 20:56

코드를 보다 보면, class에서 static func을 자주 볼 수 있습니다. 저도 이번에 XCTest Code를 공부하다가 static func 키워드를 자주 봤는데요, 헷갈리는 부분과 static func과 func과의 차이점, static func을 사용했을 때의 이점을 위주로 정리해봤습니다!


개념

Swift에서 static은 타입의 인스턴스가 아닌 타입 자체에서 호출되는 타입 수준 메서드를 정의하는 데 사용됩니다.

즉, static 메서드는 타입의 인스턴스가 아닌 타입과 연관됩니다. 그렇기 때문에 static 메서드는 타입의 인스턴스를 먼저 생성하지 않고도 타입 자체에서 호출할 수 있습니다.

반면, static을 쓰지 않은 일반 메서드는 해당 유형의 인스턴스와 연관됩니다. 해당 유형의 인스턴스에 대해서만 인스턴스 메서드를 호출할 수 있습니다.

class MyClass {
    static func staticMethod() {
        print("This is a static method")
    }
    
    func instanceMethod() {
        print("This is an instance method")
    }
}

MyClass.staticMethod() // class 자체에서 staticMethod 호출
let myInstance = MyClass()
myInstance.instanceMethod() // class의 인스턴스에서 instanceMethod 호출

위의 예제에서 staticMethod는 클래스의 인스턴스를 먼저 생성하지 않고 클래스 자체에서 호출됩니다.

반면에 instanceMethod는 myInstance 클래스의 인스턴스에서 호출됩니다.

 

활용 및 이점

static func의 개념은 알겠습니다. 그렇다면 구체적으로 어떤 상황에서 쓸 수 있고, 어떤 이점이 있는지 알아보겠습니다.

 

Swift에서 static 함수는 해당 유형의 인스턴스가 아닌 유형에 속하는 함수를 정의하는 데 사용됩니다.

이러한 함수는 해당 유형의 인스턴스를 생성하지 않고도 액세스할 수 있다고 했습니다!

 

static 함수의 일반적인 사용 사례 중 하나는 인스턴스별 데이터에 액세스할 필요가 없는 유틸리티 함수를 만들 때입니다.

예를 들어, MathUtils 구조체는 원의 넓이를 계산하는 stataic 함수를 정의할 수 있습니다.

struct MathUtils {
    static func areaOfCircle(radius: Double) -> Double {
        return Double.pi * radius * radius
    }
}

이 경우 areaOfCircle 함수는 인스턴스별 데이터에 액세스할 필요가 없으므로 static 함수로 정의할 수 있습니다.

이렇게 하면 MathUtils의 인스턴스를 생성할 필요 없이 MathUtils 유형에서 직접 호출할 수 있습니다.

 

static 함수의 또 다른 사용 사례는 타입의 인스턴스를 생성하는 팩토리 메서드를 정의할 때입니다.

예를 들어, Person 클래스는 JSON 사전에서 Person 인스턴스를 생성하는 static 함수를 정의할 수 있습니다.

class Person {
    let name: String
    let age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
    
    static func fromJson(json: [String: Any]) -> Person? {
        guard let name = json["name"] as? String, let age = json["age"] as? Int else {
            return nil
        }
        
        return Person(name: name, age: age)
    }
}

이 경우 fromJson 함수는 인스턴스별 데이터에 액세스할 필요가 없으므로 static 함수입니다.

JSON 사전을 입력으로 받아 Person 인스턴스를 반환하기만 하면 됩니다.

따라서 Person 인스턴스를 생성할 필요 없이 Person 유형에서 직접 호출할 수 있습니다.

 

요약

  • 요약하자면, static 함수는 Swift에서 해당 유형의 인스턴스가 아닌 타입 그 자체에 속하는 함수를 정의하는 데 사용됩니다.
  • 유틸리티 함수나 팩토리 메서드와 같이 함수가 인스턴스별 데이터에 액세스할 필요가 없는 상황에서 유용합니다.
  • 이러한 사용 사례들은 코드의 가독성을 높이고 유지보수를 용이하게 만들어준다는 이점이 있습니다.
저작자표시 (새창열림)

'iOS > Swift' 카테고리의 다른 글

[iOS - Swift] TDD를 위한 Unit Test 코드 작성하기 (Feat. XCTest)  (0) 2023.03.08
[iOS - Swift] XCTest FAQ (XCTest를 공부하다 생긴 궁금증들)  (0) 2023.03.07
[Swift] Struct, Initializer (구조체와 이니셜라이저)  (0) 2022.05.10
[iOS 앱 프로그래밍] 회원가입 화면 구현 - 2. 화면의 전환 (1) 내비게이션 인터페이스  (0) 2021.08.09
[iOS 앱 프로그래밍] 회원가입 화면 구현 - 1. H.I.G  (0) 2021.08.09
    'iOS/Swift' 카테고리의 다른 글
    • [iOS - Swift] TDD를 위한 Unit Test 코드 작성하기 (Feat. XCTest)
    • [iOS - Swift] XCTest FAQ (XCTest를 공부하다 생긴 궁금증들)
    • [Swift] Struct, Initializer (구조체와 이니셜라이저)
    • [iOS 앱 프로그래밍] 회원가입 화면 구현 - 2. 화면의 전환 (1) 내비게이션 인터페이스
    itisjustK
    itisjustK

    티스토리툴바